mirror of
https://github.com/antopilo/Nuake.git
synced 2026-09-09 20:08:57 +03:00
Fixed inconsistent physics callback
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user