chore: Remove dpEntity pointers from collision checking (#1529)

* chore: Remove dpEntity pointers from collision checking

* Update fn documentation in ProximityMonitorComponent.h

* use more idiomatic method to calculate vector index

* feedback

* missed a ranges::find replacement

* adjust for feedback. last changes tonight.

* okay, also remove unneeded include. then sleep.

* for real tho

* update to use unordered_set instead of set
This commit is contained in:
jadebenn
2024-04-05 00:52:26 -05:00
committed by GitHub
parent b340d7c8f9
commit 06e7d57e0d
8 changed files with 51 additions and 51 deletions

View File

@@ -3,8 +3,6 @@
#include "dpShapeBox.h"
#include "dpGrid.h"
#include <iostream>
dpEntity::dpEntity(const LWOOBJID& objectID, dpShapeType shapeType, bool isStatic) {
m_ObjectID = objectID;
m_IsStatic = isStatic;
@@ -76,16 +74,17 @@ void dpEntity::CheckCollision(dpEntity* other) {
return;
}
bool wasFound = m_CurrentlyCollidingObjects.contains(other->GetObjectID());
bool isColliding = m_CollisionShape->IsColliding(other->GetShape());
const auto objId = other->GetObjectID();
const auto objItr = m_CurrentlyCollidingObjects.find(objId);
const bool wasFound = objItr != m_CurrentlyCollidingObjects.cend();
const bool isColliding = m_CollisionShape->IsColliding(other->GetShape());
if (isColliding && !wasFound) {
m_CurrentlyCollidingObjects.emplace(other->GetObjectID(), other);
m_NewObjects.push_back(other);
m_CurrentlyCollidingObjects.emplace(objId);
m_NewObjects.push_back(objId);
} else if (!isColliding && wasFound) {
m_CurrentlyCollidingObjects.erase(other->GetObjectID());
m_RemovedObjects.push_back(other);
m_CurrentlyCollidingObjects.erase(objItr);
m_RemovedObjects.push_back(objId);
}
}

View File

@@ -2,7 +2,8 @@
#include "NiPoint3.h"
#include "NiQuaternion.h"
#include <vector>
#include <map>
#include <unordered_set>
#include <span>
#include "dCommonVars.h"
#include "dpCommon.h"
@@ -49,9 +50,9 @@ public:
bool GetSleeping() const { return m_Sleeping; }
void SetSleeping(bool value) { m_Sleeping = value; }
const std::vector<dpEntity*>& GetNewObjects() const { return m_NewObjects; }
const std::vector<dpEntity*>& GetRemovedObjects() const { return m_RemovedObjects; }
const std::map<LWOOBJID, dpEntity*>& GetCurrentlyCollidingObjects() const { return m_CurrentlyCollidingObjects; }
const std::span<const LWOOBJID> GetNewObjects() const { return m_NewObjects; }
const std::span<const LWOOBJID> GetRemovedObjects() const { return m_RemovedObjects; }
const std::unordered_set<LWOOBJID>& GetCurrentlyCollidingObjects() const { return m_CurrentlyCollidingObjects; }
void PreUpdate() { m_NewObjects.clear(); m_RemovedObjects.clear(); }
@@ -80,7 +81,7 @@ private:
bool m_IsGargantuan = false;
std::vector<dpEntity*> m_NewObjects;
std::vector<dpEntity*> m_RemovedObjects;
std::map<LWOOBJID, dpEntity*> m_CurrentlyCollidingObjects;
std::vector<LWOOBJID> m_NewObjects;
std::vector<LWOOBJID> m_RemovedObjects;
std::unordered_set<LWOOBJID> m_CurrentlyCollidingObjects;
};