diff --git a/Editor/Editor/EditorLayer.cpp b/Editor/Editor/EditorLayer.cpp index 8bc513e..63089c5 100644 --- a/Editor/Editor/EditorLayer.cpp +++ b/Editor/Editor/EditorLayer.cpp @@ -606,28 +606,39 @@ namespace Prism if (ImGui::BeginDragDropTarget()) { - auto payload = ImGui::AcceptDragDropPayload("asset_payload"); - if (payload) + if (auto payload = ImGui::AcceptDragDropPayload("asset_payload")) { int count = payload->DataSize / sizeof(AssetHandle); for (int i = 0; i < count; i++) { - AssetHandle assetHandle = *(((AssetHandle*)payload->Data) + i); + AssetHandle assetHandle = *(static_cast(payload->Data) + i); Ref asset = AssetsManager::GetAsset(assetHandle); - // We can't really support dragging and dropping scenes when we're dropping multiple assets if (count == 1 && asset->Type == AssetType::Scene) { OpenScene(asset->FilePath); + break; } - if (asset->Type == AssetType::Mesh) + switch (asset->Type) + { + case AssetType::Mesh: { Entity entity = m_EditorScene->CreateEntity(asset->FileName); entity.AddComponent(Ref(asset)); SelectEntity(entity); + break; } + case AssetType::EnvMap: + { + Entity entity = m_EditorScene->CreateEntity(asset->FileName); + entity.AddComponent(Ref(asset)); + SelectEntity(entity); + break; + } + } + } } ImGui::EndDragDropTarget(); diff --git a/Prism/src/Prism/Asset/AssetsManager.cpp b/Prism/src/Prism/Asset/AssetsManager.cpp index d911096..9572aaf 100644 --- a/Prism/src/Prism/Asset/AssetsManager.cpp +++ b/Prism/src/Prism/Asset/AssetsManager.cpp @@ -145,7 +145,7 @@ namespace Prism if (!asset->Extension.empty()) metaFileName += "." + asset->Extension; - FileSystem::Rename(oldFilePath + ".meta", metaFileName); + FileSystem::PrismDeleteFile(oldFilePath + ".meta"); AssetSerializer::CreateMetaFile(asset); } } @@ -204,6 +204,7 @@ namespace Prism s_LoadedAssets[asset->Handle] = asset; AssetSerializer::SerializeAsset(asset); + AssetSerializer::CreateMetaFile(asset); return asset; } @@ -255,6 +256,7 @@ namespace Prism s_LoadedAssets[asset->Handle] = asset; AssetSerializer::SerializeAsset(asset); + AssetSerializer::CreateMetaFile(asset); return asset; } @@ -308,7 +310,6 @@ namespace Prism const AssetType type = AssetTypes::GetAssetTypeFromExtension(extension); Ref asset = AssetSerializer::LoadAssetInfo(filepath, parentHandle, type); - if (s_LoadedAssets.find(asset->Handle) != s_LoadedAssets.end()) { if (s_LoadedAssets[asset->Handle]->IsDataLoaded) diff --git a/Prism/src/Prism/Core/Log.cpp b/Prism/src/Prism/Core/Log.cpp index 91c507c..78374ff 100644 --- a/Prism/src/Prism/Core/Log.cpp +++ b/Prism/src/Prism/Core/Log.cpp @@ -2,14 +2,12 @@ // Created by sfd on 25-11-15. // -#include "pmpch.h" #include "Log.h" #include #include "spdlog/sinks/basic_file_sink.h" #include "spdlog/sinks/stdout_color_sinks-inl.h" -#include "spdlog/sinks/stdout_sinks.h" #ifdef _DEBUG #define LOG_LEVEL spdlog::level::trace @@ -30,29 +28,23 @@ namespace Prism std::vector prismSinks = { - std::make_shared(), + std::make_shared(), std::make_shared("logs/PRISM.log", true) }; std::vector appSinks = { - std::make_shared(), + std::make_shared(), std::make_shared("logs/APP.log", true) }; s_CoreLogger = std::make_shared("PRISM", prismSinks.begin(), prismSinks.end()); s_CoreLogger->set_level(LOG_LEVEL); + s_CoreLogger->set_pattern("%^[%Y-%m-%d %H:%M:%S.%e] [%l] %v%$"); s_ClientLogger = std::make_shared("APP", appSinks.begin(), appSinks.end()); s_ClientLogger->set_level(LOG_LEVEL); - /* - spdlog::set_pattern("%^[%T] [%n]%v%$"); - s_CoreLogger = spdlog::stdout_color_mt("PRISM"); - s_CoreLogger->set_level(LOG_LEVEL); - - s_ClientLogger = spdlog::stdout_color_mt("APP"); - s_ClientLogger->set_level(LOG_LEVEL); - */ + s_CoreLogger->set_pattern("%^[%Y-%m-%d %H:%M:%S.%e] [%l] %v%$"); } void Log::Shutdown() diff --git a/Prism/src/Prism/Core/Log.h b/Prism/src/Prism/Core/Log.h index 068a26e..41a0fa8 100644 --- a/Prism/src/Prism/Core/Log.h +++ b/Prism/src/Prism/Core/Log.h @@ -26,18 +26,18 @@ namespace Prism } -#define PM_CORE_TRACE(...) ::Prism::Log::GetCoreLogger()->trace("[TRACE]: " __VA_ARGS__) -#define PM_CORE_DEBUG(...) ::Prism::Log::GetCoreLogger()->debug("[DEBUG]: " __VA_ARGS__) -#define PM_CORE_INFO(...) ::Prism::Log::GetCoreLogger()->info("[INFO]: " __VA_ARGS__) -#define PM_CORE_WARN(...) ::Prism::Log::GetCoreLogger()->warn("[WARN]: " __VA_ARGS__) -#define PM_CORE_ERROR(...) ::Prism::Log::GetCoreLogger()->error("[ERROR]: " __VA_ARGS__) -#define PM_CORE_FATAL(...) ::Prism::Log::GetCoreLogger()->critical("[FATAL]: " __VA_ARGS__) +#define PM_CORE_TRACE(...) ::Prism::Log::GetCoreLogger()->trace(__VA_ARGS__) +#define PM_CORE_DEBUG(...) ::Prism::Log::GetCoreLogger()->debug( __VA_ARGS__) +#define PM_CORE_INFO(...) ::Prism::Log::GetCoreLogger()->info(__VA_ARGS__) +#define PM_CORE_WARN(...) ::Prism::Log::GetCoreLogger()->warn(__VA_ARGS__) +#define PM_CORE_ERROR(...) ::Prism::Log::GetCoreLogger()->error(__VA_ARGS__) +#define PM_CORE_FATAL(...) ::Prism::Log::GetCoreLogger()->critical(__VA_ARGS__) -#define PM_CLIENT_TRACE(...) ::Prism::Log::GetClientLogger()->trace("[TRACE]: " __VA_ARGS__) -#define PM_CLIENT_DEBUG(...) ::Prism::Log::GetClientLogger()->debug("[DEBUG]: " __VA_ARGS__) -#define PM_CLIENT_INFO(...) ::Prism::Log::GetClientLogger()->info("[INFO]: " __VA_ARGS__) -#define PM_CLIENT_WARN(...) ::Prism::Log::GetClientLogger()->warn("[WARN]: " __VA_ARGS__) -#define PM_CLIENT_ERROR(...) ::Prism::Log::GetClientLogger()->error("[ERROR]: " __VA_ARGS__) -#define PM_CLIENT_FATAL(...) ::Prism::Log::GetClientLogger()->critical("[FATAL]: " __VA_ARGS__) +#define PM_CLIENT_TRACE(...) ::Prism::Log::GetClientLogger()->trace(__VA_ARGS__) +#define PM_CLIENT_DEBUG(...) ::Prism::Log::GetClientLogger()->debug(__VA_ARGS__) +#define PM_CLIENT_INFO(...) ::Prism::Log::GetClientLogger()->info(__VA_ARGS__) +#define PM_CLIENT_WARN(...) ::Prism::Log::GetClientLogger()->warn(__VA_ARGS__) +#define PM_CLIENT_ERROR(...) ::Prism::Log::GetClientLogger()->error(__VA_ARGS__) +#define PM_CLIENT_FATAL(...) ::Prism::Log::GetClientLogger()->critical(__VA_ARGS__) #endif //LOG_H diff --git a/Prism/src/Prism/Core/Ref.h b/Prism/src/Prism/Core/Ref.h index 624083d..5513fe8 100644 --- a/Prism/src/Prism/Core/Ref.h +++ b/Prism/src/Prism/Core/Ref.h @@ -9,8 +9,6 @@ #include #include -#include "Log.h" - namespace Prism { class PRISM_API RefCounted @@ -143,9 +141,6 @@ namespace Prism if (m_Instance) { m_Instance->IncRefCount(); - // PM_CORE_DEBUG("{"); - // PM_CORE_DEBUG("{0}:{1}: +{2}",(uint64_t)(&m_Instance), typeid(*m_Instance).name(), m_Instance->GetRefCount()); - // if (m_Instance->GetRefCount() >= 1000) PM_CORE_ASSERT(false); } } @@ -154,11 +149,8 @@ namespace Prism if (m_Instance) { m_Instance->DecRefCount(); - // PM_CORE_DEBUG("{0}:{1}: -{2}",(uint64_t)(&m_Instance), typeid(*m_Instance).name(), m_Instance->GetRefCount()); - // PM_CORE_DEBUG("}"); if (m_Instance->GetRefCount() == 0) { - // PM_CORE_DEBUG("{0}:{1}: delete",(uint64_t)(&m_Instance), typeid(*m_Instance).name()); delete m_Instance; } } diff --git a/Prism/src/Prism/Editor/EditorCamera.cpp b/Prism/src/Prism/Editor/EditorCamera.cpp index 0d974d8..535a1e1 100644 --- a/Prism/src/Prism/Editor/EditorCamera.cpp +++ b/Prism/src/Prism/Editor/EditorCamera.cpp @@ -24,7 +24,7 @@ namespace Prism m_FocalPoint = glm::vec3(0.0f); - glm::vec3 position = { -5, 5, 5}; + constexpr glm::vec3 position = { -5, 5, 5}; m_Distance = glm::distance(position, m_FocalPoint); m_Yaw = 3.0f * (float)M_PI / 4.0f; @@ -57,7 +57,6 @@ namespace Prism m_InitialMousePosition = { Input::GetMouseX(), Input::GetMouseY() }; m_IsRightButtonDownState = true; m_FreeLookActive = true; - m_FreeLookPosition = m_Position; m_Velocity = glm::vec3(0.0f); } @@ -88,11 +87,11 @@ namespace Prism // m_Velocity *= (1.0f - m_Damping * deltaTime); - m_FreeLookPosition += m_Velocity * deltaTime.GetSeconds(); + m_Position += m_Velocity * deltaTime.GetSeconds(); // --------------------------------- glm::quat orientation = GetOrientation(); - m_ViewMatrix = glm::translate(glm::mat4(1.0f), m_FreeLookPosition) * glm::toMat4(orientation); + m_ViewMatrix = glm::translate(glm::mat4(1.0f), m_Position) * glm::toMat4(orientation); m_ViewMatrix = glm::inverse(m_ViewMatrix); m_Rotation = glm::eulerAngles(orientation) * (180.0f / (float)M_PI); return; @@ -105,7 +104,6 @@ namespace Prism m_IsRightButtonDownState = false; if (m_FreeLookActive) { - m_Position = m_FreeLookPosition; m_FocalPoint = m_Position + GetForwardDirection() * m_Distance; m_FreeLookActive = false; } diff --git a/Prism/src/Prism/Editor/EditorCamera.h b/Prism/src/Prism/Editor/EditorCamera.h index b7abd22..2bc35ce 100644 --- a/Prism/src/Prism/Editor/EditorCamera.h +++ b/Prism/src/Prism/Editor/EditorCamera.h @@ -84,7 +84,6 @@ namespace Prism bool m_IsAltKeyDownState = false; bool m_FreeLookActive; - glm::vec3 m_FreeLookPosition; glm::vec3 m_Velocity = glm::vec3(0.0f); // 当前速度 float m_MaxSpeed = 20.0f; // 最大移动速度(单位/秒) diff --git a/Prism/src/Prism/Physics/PhysicsWrappers.cpp b/Prism/src/Prism/Physics/PhysicsWrappers.cpp index ab1f530..f3797b8 100644 --- a/Prism/src/Prism/Physics/PhysicsWrappers.cpp +++ b/Prism/src/Prism/Physics/PhysicsWrappers.cpp @@ -449,11 +449,17 @@ namespace Prism continue; } - auto convexGeometry = physx::PxConvexMeshGeometry(convexMesh, physx::PxMeshScale(ToPhysXVector(scale))); + + + glm::vec3 submeshTranslation, submeshRotation, submeshScale; + Math::DecomposeTransform(submesh.Transform, submeshTranslation, submeshRotation, submeshScale); + + auto convexGeometry = physx::PxConvexMeshGeometry( convexMesh, physx::PxMeshScale(ToPhysXVector(submeshScale * scale)) ); convexGeometry.meshFlags = physx::PxConvexMeshGeometryFlag::eTIGHT_BOUNDS; + physx::PxMaterial* material = s_Physics->createMaterial(0, 0, 0); // Dummy material, will be replaced at runtime. physx::PxShape* shape = s_Physics->createShape(convexGeometry, *material, true); - shape->setLocalPose(ToPhysXTransform(submesh.Transform)); + shape->setLocalPose(ToPhysXTransform(submeshTranslation, submeshRotation)); shapes.push_back(shape); @@ -499,7 +505,9 @@ namespace Prism } } - collider.ProcessedMeshes.push_back(Ref::Create(collisionVertices, collisionIndices, FromPhysXTransform(shape->getLocalPose()))); + glm::mat4 scale_mat = glm::scale(glm::mat4(1.0f), *(glm::vec3*)&convexGeometry.scale.scale); + glm::mat4 transform = FromPhysXTransform(shape->getLocalPose()) * scale_mat; + collider.ProcessedMeshes.push_back(Ref::Create(collisionVertices, collisionIndices, transform)); } } diff --git a/Prism/src/Prism/Renderer/SceneRenderer.cpp b/Prism/src/Prism/Renderer/SceneRenderer.cpp index 9f26f72..44e00d8 100644 --- a/Prism/src/Prism/Renderer/SceneRenderer.cpp +++ b/Prism/src/Prism/Renderer/SceneRenderer.cpp @@ -50,7 +50,7 @@ namespace Prism float CurrentExposure = 1.0f; bool EnableAutoExposure = true; - float Key = 0.18f; // middle gray + float Key = 0.11f; // middle gray float AdaptationSpeed = 5.0f; // stops per second Timer ExposureTimer; diff --git a/Prism/src/Prism/Scene/Components.h b/Prism/src/Prism/Scene/Components.h index 2e3d10c..ec10f9d 100644 --- a/Prism/src/Prism/Scene/Components.h +++ b/Prism/src/Prism/Scene/Components.h @@ -284,6 +284,10 @@ namespace Prism float Intensity = 1.0f; float Angle = 0.0f; + SkyLightComponent(const Ref& environment) + : SceneEnvironment(environment) + { + } SkyLightComponent() : SceneEnvironment(Ref::Create()) {