Sdk/PhysicsSystem: Create PhysWorld only if required by entities
This commit is contained in:
parent
9f771f8c01
commit
debf87e739
|
|
@ -10,6 +10,7 @@
|
||||||
#include <Nazara/Physics/PhysWorld.hpp>
|
#include <Nazara/Physics/PhysWorld.hpp>
|
||||||
#include <NDK/EntityList.hpp>
|
#include <NDK/EntityList.hpp>
|
||||||
#include <NDK/System.hpp>
|
#include <NDK/System.hpp>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
namespace Ndk
|
namespace Ndk
|
||||||
{
|
{
|
||||||
|
|
@ -31,7 +32,7 @@ namespace Ndk
|
||||||
|
|
||||||
EntityList m_dynamicObjects;
|
EntityList m_dynamicObjects;
|
||||||
EntityList m_staticObjects;
|
EntityList m_staticObjects;
|
||||||
Nz::PhysWorld m_world;
|
std::unique_ptr<Nz::PhysWorld> m_world; ///TODO: std::optional (Should I make a Nz::Optional class?)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ namespace Ndk
|
||||||
|
|
||||||
inline Nz::PhysWorld& PhysicsSystem::GetWorld()
|
inline Nz::PhysWorld& PhysicsSystem::GetWorld()
|
||||||
{
|
{
|
||||||
return m_world;
|
return *m_world;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -21,6 +21,6 @@ namespace Ndk
|
||||||
|
|
||||||
inline const Nz::PhysWorld& PhysicsSystem::GetWorld() const
|
inline const Nz::PhysWorld& PhysicsSystem::GetWorld() const
|
||||||
{
|
{
|
||||||
return m_world;
|
return *m_world;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,16 +50,19 @@ namespace Ndk
|
||||||
|
|
||||||
void PhysicsSystem::OnEntityValidation(Entity* entity, bool justAdded)
|
void PhysicsSystem::OnEntityValidation(Entity* entity, bool justAdded)
|
||||||
{
|
{
|
||||||
// If entity has not been just added to the system, it is possible that it does not own to the right array
|
// It's possible our entity got revalidated because of the addition/removal of a PhysicsComponent
|
||||||
if (!justAdded)
|
if (!justAdded)
|
||||||
{
|
{
|
||||||
// We take the inverted array from which the entity should belong to
|
// We take the opposite array from which the entity should belong to
|
||||||
auto& entities = (entity->HasComponent<PhysicsComponent>()) ? m_staticObjects : m_dynamicObjects;
|
auto& entities = (entity->HasComponent<PhysicsComponent>()) ? m_staticObjects : m_dynamicObjects;
|
||||||
entities.Remove(entity);
|
entities.Remove(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& entities = (entity->HasComponent<PhysicsComponent>()) ? m_dynamicObjects : m_staticObjects;
|
auto& entities = (entity->HasComponent<PhysicsComponent>()) ? m_dynamicObjects : m_staticObjects;
|
||||||
entities.Insert(entity);
|
entities.Insert(entity);
|
||||||
|
|
||||||
|
if (!m_world)
|
||||||
|
m_world = std::make_unique<Nz::PhysWorld>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -70,7 +73,10 @@ namespace Ndk
|
||||||
|
|
||||||
void PhysicsSystem::OnUpdate(float elapsedTime)
|
void PhysicsSystem::OnUpdate(float elapsedTime)
|
||||||
{
|
{
|
||||||
m_world.Step(elapsedTime);
|
if (!m_world)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_world->Step(elapsedTime);
|
||||||
|
|
||||||
for (const Ndk::EntityHandle& entity : m_dynamicObjects)
|
for (const Ndk::EntityHandle& entity : m_dynamicObjects)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue