From ba732ea64ca00d53a69c9265d274585dcc9fbde2 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 20 Mar 2023 16:38:15 +0800 Subject: [PATCH] Fixed trajectory renderable --- .../SHTrajectoryRenderableComponent.cpp | 9 ++++++++- .../SHTrajectoryRenderableComponent.h | 6 +++++- .../SHTrajectoryRenderingSubSystem.cpp | 12 ++++++++++-- .../{ => src/Physics/System}/SHGhostBody.cpp | 12 ++++++------ SHADE_Engine/{ => src/Physics/System}/SHGhostBody.h | 0 SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp | 2 +- .../src/Components/TrajectoryRenderable.cxx | 4 ++-- .../src/Components/TrajectoryRenderable.hxx | 2 +- 8 files changed, 33 insertions(+), 14 deletions(-) rename SHADE_Engine/{ => src/Physics/System}/SHGhostBody.cpp (82%) rename SHADE_Engine/{ => src/Physics/System}/SHGhostBody.h (100%) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp index 41678935..b7ef5e35 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp @@ -14,6 +14,7 @@ namespace SHADE /***************************************************************************/ void SHTrajectoryRenderableComponent::OnCreate(void) { + ResetSimulationInfo(); } void SHTrajectoryRenderableComponent::OnDestroy(void) @@ -22,12 +23,13 @@ namespace SHADE } - void SHTrajectoryRenderableComponent::SimulateTrajectory(EntityID eid, SHVec3 force, float timestep, uint32_t maxSteps) noexcept + void SHTrajectoryRenderableComponent::SimulateTrajectory(EntityID eid, float mass, SHVec3 force, float timestep, uint32_t maxSteps) noexcept { entityToSimulate = eid; simulationForce = force; simulationTimestep = timestep; simulationMaxSteps = maxSteps; + objectMass = mass; } float SHTrajectoryRenderableComponent::GetSimulationTimestep(void) const noexcept @@ -35,6 +37,11 @@ namespace SHADE return simulationTimestep; } + float SHTrajectoryRenderableComponent::GetObjectMass(void) const noexcept + { + return objectMass; + } + void SHTrajectoryRenderableComponent::ResetSimulationInfo(void) noexcept { entityToSimulate = MAX_EID; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h index 95d40af1..51536107 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h @@ -36,6 +36,9 @@ namespace SHADE //! plotting a point in the simulation float simulationTimestep; + //! mass of the object to simulate + float objectMass; + //! Entity to simulate trajectory of EntityID entityToSimulate; @@ -68,12 +71,13 @@ namespace SHADE SHVec3 GetSimulationForce (void) const noexcept; uint32_t GetSimulationMaxSteps (void) const noexcept; float GetSimulationTimestep (void) const noexcept; + float GetObjectMass (void) const noexcept; void ResetSimulationInfo (void) noexcept; void OnCreate(void) override final; void OnDestroy(void) override final; - void SimulateTrajectory (EntityID eid, SHVec3 force, float timestep, uint32_t maxSteps) noexcept; + void SimulateTrajectory (EntityID eid, float mass, SHVec3 force, float timestep, uint32_t maxSteps) noexcept; RTTR_ENABLE() diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp index 5f211929..dab94c5d 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp @@ -1,7 +1,6 @@ #include "SHpch.h" #include "SHTrajectoryRenderingSubSystem.h" -#include "../../../../SHGhostBody.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h" #include "Graphics/Devices/SHVkLogicalDevice.h" @@ -15,6 +14,7 @@ #include "Graphics/MiddleEnd/Interface/SHRenderer.h" #include "Physics/System/SHPhysicsSystem.h" #include "ECS_Base/Managers/SHSystemManager.h" +#include namespace SHADE { @@ -88,7 +88,13 @@ namespace SHADE std::vector positions{}; std::vector quats{}; - SHGhostBody defaultGhostBody{}; + auto* rigidBodyComp = SHComponentManager::GetComponent_s(entityToSimulate); + if (!rigidBodyComp) + continue; + + SHGhostBody defaultGhostBody{*rigidBodyComp}; + + defaultGhostBody.mass = comp.GetObjectMass(); SHPhysicsSystem::SimulateBodyInfo simulateInfo { @@ -109,6 +115,8 @@ namespace SHADE comp.ResetSimulationInfo(); + std::cout << positions.size() << std::endl; + // If has positions, feed data to buffer. if (!positions.empty()) { diff --git a/SHADE_Engine/SHGhostBody.cpp b/SHADE_Engine/src/Physics/System/SHGhostBody.cpp similarity index 82% rename from SHADE_Engine/SHGhostBody.cpp rename to SHADE_Engine/src/Physics/System/SHGhostBody.cpp index ef260521..2a5cff3a 100644 --- a/SHADE_Engine/SHGhostBody.cpp +++ b/SHADE_Engine/src/Physics/System/SHGhostBody.cpp @@ -38,13 +38,13 @@ namespace SHADE localInvInertia.y = 1.0f / LOCAL_INERTIA.y; localInvInertia.z = 1.0f / LOCAL_INERTIA.z; - linearLock.x = rigidBody.GetFreezePositionX() ? 1.0f : 0.0f; - linearLock.y = rigidBody.GetFreezePositionY() ? 1.0f : 0.0f; - linearLock.z = rigidBody.GetFreezePositionZ() ? 1.0f : 0.0f; + linearLock.x = rigidBody.GetFreezePositionX() ? 0.0f : 1.0f; + linearLock.y = rigidBody.GetFreezePositionY() ? 0.0f : 1.0f; + linearLock.z = rigidBody.GetFreezePositionZ() ? 0.0f : 1.0f; - angularLock.x = rigidBody.GetFreezeRotationX() ? 1.0f : 0.0f; - angularLock.y = rigidBody.GetFreezeRotationY() ? 1.0f : 0.0f; - angularLock.z = rigidBody.GetFreezeRotationZ() ? 1.0f : 0.0f; + angularLock.x = rigidBody.GetFreezeRotationX() ? 0.0f : 1.0f; + angularLock.y = rigidBody.GetFreezeRotationY() ? 0.0f : 1.0f; + angularLock.z = rigidBody.GetFreezeRotationZ() ? 0.0f : 1.0f; } diff --git a/SHADE_Engine/SHGhostBody.h b/SHADE_Engine/src/Physics/System/SHGhostBody.h similarity index 100% rename from SHADE_Engine/SHGhostBody.h rename to SHADE_Engine/src/Physics/System/SHGhostBody.h diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index 75ed50f4..32d6f03e 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -14,7 +14,6 @@ #include "SHPhysicsSystem.h" // Project Headers -#include "../../../SHGhostBody.h" #include "Assets/SHAssetMacros.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "ECS_Base/Managers/SHEntityManager.h" @@ -25,6 +24,7 @@ #include "Physics/Interface/SHColliderComponent.h" #include "Scene/SHSceneManager.h" #include "Scripting/SHScriptEngine.h" +#include "SHGhostBody.h" namespace SHADE { diff --git a/SHADE_Managed/src/Components/TrajectoryRenderable.cxx b/SHADE_Managed/src/Components/TrajectoryRenderable.cxx index 9eace4ab..7234147c 100644 --- a/SHADE_Managed/src/Components/TrajectoryRenderable.cxx +++ b/SHADE_Managed/src/Components/TrajectoryRenderable.cxx @@ -13,9 +13,9 @@ namespace SHADE } - void TrajectoryRenderable::SimulateTrajectory(EntityID eid, Vector3 force, float timestep, uint32_t maxSteps) + void TrajectoryRenderable::SimulateTrajectory(EntityID eid, float mass, Vector3 force, float timestep, uint32_t maxSteps) { - GetNativeComponent()->SimulateTrajectory(eid, Convert::ToNative(force), timestep, maxSteps); + GetNativeComponent()->SimulateTrajectory(eid, mass, Convert::ToNative(force), timestep, maxSteps); } MeshAsset TrajectoryRenderable::Mesh::get() diff --git a/SHADE_Managed/src/Components/TrajectoryRenderable.hxx b/SHADE_Managed/src/Components/TrajectoryRenderable.hxx index 78e3c0f1..e6f71788 100644 --- a/SHADE_Managed/src/Components/TrajectoryRenderable.hxx +++ b/SHADE_Managed/src/Components/TrajectoryRenderable.hxx @@ -83,7 +83,7 @@ namespace SHADE void set(float val); } - void SimulateTrajectory(EntityID eid, Vector3 force, float timestep, uint32_t maxSteps); + void SimulateTrajectory(EntityID eid, float mass, Vector3 force, float timestep, uint32_t maxSteps); }; }