CSortedLists: Remove const_cast in all BuildNearList() implementations

Same behavior, but nicer to read.
This commit is contained in:
Lioncash 2020-03-29 21:20:46 -04:00
parent 0a366855bc
commit 1d725587e5
2 changed files with 20 additions and 17 deletions

View File

@ -235,41 +235,44 @@ s16 CSortedListManager::CalculateIntersections(ESortedList la, ESortedList lb, s
void CSortedListManager::BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CVector3f& pos, void CSortedListManager::BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CVector3f& pos,
const zeus::CVector3f& dir, float mag, const CMaterialFilter& filter, const zeus::CVector3f& dir, float mag, const CMaterialFilter& filter,
const CActor* actor) const { const CActor* actor) {
if (mag == 0.f) if (mag == 0.f) {
mag = 8000.f; mag = 8000.f;
}
const zeus::CVector3f ray = dir * mag; const zeus::CVector3f ray = dir * mag;
const zeus::CVector3f sum = ray + pos; const zeus::CVector3f sum = ray + pos;
zeus::CVector3f maxs(std::max(pos.x(), sum.x()), std::max(pos.y(), sum.y()), std::max(pos.z(), sum.z())); const zeus::CVector3f maxs(std::max(pos.x(), sum.x()), std::max(pos.y(), sum.y()), std::max(pos.z(), sum.z()));
zeus::CVector3f mins(std::min(sum.x(), pos.x()), std::min(sum.y(), pos.y()), std::min(sum.z(), pos.z())); const zeus::CVector3f mins(std::min(sum.x(), pos.x()), std::min(sum.y(), pos.y()), std::min(sum.z(), pos.z()));
BuildNearList(out, zeus::CAABox(mins, maxs), filter, actor); BuildNearList(out, zeus::CAABox(mins, maxs), filter, actor);
} }
void CSortedListManager::BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const CActor& actor, void CSortedListManager::BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const CActor& actor,
const zeus::CAABox& aabb) const { const zeus::CAABox& aabb) {
const CMaterialFilter& filter = actor.GetMaterialFilter(); const CMaterialFilter& filter = actor.GetMaterialFilter();
s16 id = const_cast<CSortedListManager&>(*this).ConstructIntersectionArray(aabb); s16 id = ConstructIntersectionArray(aabb);
while (id != -1) { while (id != -1) {
const SNode& node = AccessElement(x0_nodes, id); SNode& node = AccessElement(x0_nodes, id);
if (&actor != node.x0_actor && filter.Passes(node.x0_actor->GetMaterialList()) && if (&actor != node.x0_actor && filter.Passes(node.x0_actor->GetMaterialList()) &&
node.x0_actor->GetMaterialFilter().Passes(actor.GetMaterialList())) node.x0_actor->GetMaterialFilter().Passes(actor.GetMaterialList())) {
out.push_back(node.x0_actor->GetUniqueId()); out.push_back(node.x0_actor->GetUniqueId());
}
id = node.x28_next; id = node.x28_next;
const_cast<SNode&>(node).x28_next = -1; node.x28_next = -1;
} }
} }
void CSortedListManager::BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CAABox& aabb, void CSortedListManager::BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CAABox& aabb,
const CMaterialFilter& filter, const CActor* actor) const { const CMaterialFilter& filter, const CActor* actor) {
s16 id = const_cast<CSortedListManager&>(*this).ConstructIntersectionArray(aabb); s16 id = ConstructIntersectionArray(aabb);
while (id != -1) { while (id != -1) {
const SNode& node = AccessElement(x0_nodes, id); SNode& node = AccessElement(x0_nodes, id);
if (actor != node.x0_actor && filter.Passes(node.x0_actor->GetMaterialList())) if (actor != node.x0_actor && filter.Passes(node.x0_actor->GetMaterialList())) {
out.push_back(node.x0_actor->GetUniqueId()); out.push_back(node.x0_actor->GetUniqueId());
}
id = node.x28_next; id = node.x28_next;
const_cast<SNode&>(node).x28_next = -1; node.x28_next = -1;
} }
} }

View File

@ -44,10 +44,10 @@ class CSortedListManager {
public: public:
CSortedListManager(); CSortedListManager();
void BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CVector3f& pos, void BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CVector3f& pos,
const zeus::CVector3f& dir, float mag, const CMaterialFilter& filter, const CActor* actor) const; const zeus::CVector3f& dir, float mag, const CMaterialFilter& filter, const CActor* actor);
void BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const CActor& actor, const zeus::CAABox& aabb) const; void BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const CActor& actor, const zeus::CAABox& aabb);
void BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CAABox& aabb, void BuildNearList(rstl::reserved_vector<TUniqueId, 1024>& out, const zeus::CAABox& aabb,
const CMaterialFilter& filter, const CActor* actor) const; const CMaterialFilter& filter, const CActor* actor);
void Remove(const CActor* actor); void Remove(const CActor* actor);
void Move(const CActor* actor, const zeus::CAABox& aabb); void Move(const CActor* actor, const zeus::CAABox& aabb);
void Insert(const CActor* actor, const zeus::CAABox& aabb); void Insert(const CActor* actor, const zeus::CAABox& aabb);