Fixed inconsistent physics callback

This commit is contained in:
Antoine Pilote
2024-04-18 23:30:46 -04:00
parent c981b45cac
commit 5cb99f7ef6
4 changed files with 17 additions and 7 deletions

View File

@@ -29,13 +29,13 @@
#include "src/Misc/GizmoDrawer.h"
#include "src/Windows/FileSystemUI.h"
#include <src/Core/Maths.h>
#include <src/Rendering/SceneRenderer.h>
#include "src/Core/Maths.h"
#include "src/Rendering/SceneRenderer.h"
#include "src/Misc/WindowTheming.h"
#include <src/Application/Application.h>
#include "src/Application/Application.h"
#include <src/Application/EntryPoint.h>
#include "src/Application/EntryPoint.h"
#include "src/EditorApplication.h"

View File

@@ -715,12 +715,20 @@ namespace Nuake
}
}
void DynamicWorld::ClearCollisionData()
{
std::scoped_lock<std::mutex> lock(_CollisionCallbackMutex);
_CollisionCallbacks.clear();;
}
void DynamicWorld::RegisterCollisionCallback(const CollisionData& data)
{
// This will be called from multiple threads
std::scoped_lock<std::mutex> lock(_CollisionCallbackMutex);
_CollisionCallbacks.push_back(std::move(data));
Logger::Log("Registered collision");
}
const std::vector<CollisionData>& DynamicWorld::GetCollisionsData()

View File

@@ -85,6 +85,8 @@ namespace Nuake
void StepSimulation(Timestep ts);
void Clear();
void ClearCollisionData();
void RegisterCollisionCallback(const CollisionData& data);
const std::vector<CollisionData>& GetCollisionsData();
private:

View File

@@ -174,17 +174,17 @@ namespace Nuake
auto& scriptingEngineNet = ScriptingEngineNet::Get();
auto& physicsManager = PhysicsManager::Get();
const auto& collisions = physicsManager.GetCollisions();
const auto collisions = physicsManager.GetCollisions();
for (const auto& col : collisions)
{
Entity entity1 = { (entt::entity)col.Entity1, m_Scene };
Entity entity2 = { (entt::entity)col.Entity2, m_Scene };
if (entity1.IsValid() && scriptingEngineNet.HasEntityScriptInstance(entity1))
{
auto scriptInstance = scriptingEngineNet.GetEntityScript(entity1);
scriptInstance.InvokeMethod("OnCollisionInternal", (int)col.Entity1, (int)col.Entity2);
}
}
physicsManager.GetWorld()->ClearCollisionData();
}
}