mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-12-15 12:46:07 +00:00
Match and link CCollisionInfo
This commit is contained in:
70
src/Collision/CCollisionInfo.cpp
Normal file
70
src/Collision/CCollisionInfo.cpp
Normal file
@@ -0,0 +1,70 @@
|
||||
#include "Collision/CCollisionInfo.hpp"
|
||||
|
||||
#include "Kyoto/Math/CAABox.hpp"
|
||||
|
||||
#include "rstl/algorithm.hpp"
|
||||
|
||||
CCollisionInfo::CCollisionInfo(const CVector3f& point, const CMaterialList& rightMat,
|
||||
const CMaterialList& leftMat, const CVector3f& normal)
|
||||
: x0_point(point)
|
||||
, xc_extentX(CVector3f::Zero())
|
||||
, x18_extentY(CVector3f::Zero())
|
||||
, x24_extentZ(CVector3f::Zero())
|
||||
, x30_valid(true)
|
||||
, x31_hasExtents(false)
|
||||
, x38_materialLeft(leftMat)
|
||||
, x40_materialRight(rightMat)
|
||||
, x48_normalLeft(normal)
|
||||
, x54_normalRight(-normal) {}
|
||||
|
||||
CCollisionInfo::CCollisionInfo(const CVector3f& point, const CMaterialList& rightMat,
|
||||
const CMaterialList& leftMat, const CVector3f& leftNormal,
|
||||
const CVector3f& rightNormal)
|
||||
: x0_point(point)
|
||||
, xc_extentX(CVector3f::Zero())
|
||||
, x18_extentY(CVector3f::Zero())
|
||||
, x24_extentZ(CVector3f::Zero())
|
||||
, x30_valid(true)
|
||||
, x31_hasExtents(false)
|
||||
, x38_materialLeft(leftMat)
|
||||
, x40_materialRight(rightMat)
|
||||
, x48_normalLeft(leftNormal)
|
||||
, x54_normalRight(rightNormal) {}
|
||||
|
||||
CCollisionInfo::CCollisionInfo(const CAABox& aabox, const CMaterialList& rightMat,
|
||||
const CMaterialList& leftMat, const CVector3f& leftNormal,
|
||||
const CVector3f& rightNormal)
|
||||
: x0_point(aabox.GetMinPoint())
|
||||
, xc_extentX(aabox.GetMaxPoint().GetX() - aabox.GetMinPoint().GetX(), 0.f, 0.f)
|
||||
, x18_extentY(0.f, aabox.GetMaxPoint().GetY() - aabox.GetMinPoint().GetY(), 0.f)
|
||||
, x24_extentZ(0.f, 0.f, aabox.GetMaxPoint().GetZ() - aabox.GetMinPoint().GetZ())
|
||||
, x30_valid(true)
|
||||
, x31_hasExtents(true)
|
||||
, x38_materialLeft(leftMat)
|
||||
, x40_materialRight(rightMat)
|
||||
, x48_normalLeft(leftNormal)
|
||||
, x54_normalRight(rightNormal) {}
|
||||
|
||||
CCollisionInfo CCollisionInfo::GetSwapped() const { return CCollisionInfo(*this, kSM_Swap); }
|
||||
|
||||
CCollisionInfo::CCollisionInfo(EInvalid invalid)
|
||||
: x0_point(0.f, 0.f, 0.f)
|
||||
, xc_extentX(0.f, 0.f, 0.f)
|
||||
, x18_extentY(0.f, 0.f, 0.f)
|
||||
, x24_extentZ(0.f, 0.f, 0.f)
|
||||
, x30_valid(false)
|
||||
, x31_hasExtents(false)
|
||||
, x38_materialLeft(CMaterialList())
|
||||
, x40_materialRight(CMaterialList())
|
||||
, x48_normalLeft(0.f, 0.f, 0.f)
|
||||
, x54_normalRight(0.f, 0.f, 0.f) {}
|
||||
|
||||
CVector3f CCollisionInfo::GetExtreme() const {
|
||||
return x0_point + xc_extentX + x18_extentY + x24_extentZ;
|
||||
}
|
||||
|
||||
void CCollisionInfo::Swap() {
|
||||
x48_normalLeft = -x48_normalLeft;
|
||||
x54_normalRight = -x54_normalRight;
|
||||
rstl::swap(x38_materialLeft, x40_materialRight);
|
||||
}
|
||||
30
src/Collision/COBBox.cpp
Normal file
30
src/Collision/COBBox.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
#include "Collision/COBBox.hpp"
|
||||
|
||||
#include "Kyoto/Streams/CInputStream.hpp"
|
||||
|
||||
COBBox::COBBox(const CTransform4f& xf, const CVector3f& extents)
|
||||
: mTransform(xf), mExtents(extents) {}
|
||||
|
||||
COBBox::COBBox(CInputStream& in) : mTransform(in), mExtents(in) {}
|
||||
|
||||
CAABox COBBox::CalculateAABox(const CTransform4f& xf) const {
|
||||
}
|
||||
|
||||
COBBox COBBox::FromAABox(const CAABox& box, const CTransform4f& xf) {
|
||||
CVector3f center = box.GetCenterPoint();
|
||||
CVector3f extents = box.GetMaxPoint() - center;
|
||||
CTransform4f final = xf * CTransform4f::Translate(center);
|
||||
return COBBox(final, extents);
|
||||
}
|
||||
|
||||
bool COBBox::LineIntersectsBox(const CMRay& ray, float& penetration) const {
|
||||
|
||||
}
|
||||
|
||||
bool COBBox::AABoxIntersectsBox(const CAABox& box) const {
|
||||
return OBBIntersectsBox(FromAABox(box, CTransform4f::Identity()));
|
||||
}
|
||||
|
||||
bool COBBox::OBBIntersectsBox(const COBBox& box) const {
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user