Halfway match CAABox; continue CBallCamera

Former-commit-id: 602109d8f0
This commit is contained in:
2022-09-29 19:55:38 -04:00
parent 8f3807da18
commit 1f56cefe8c
41 changed files with 1023 additions and 173 deletions

View File

@@ -3,10 +3,11 @@
#include "types.h"
class CStateManager;
class CAreaCollisionCache;
class CCollisionPrimitive;
class CTransform4f;
class CMaterialFilter;
class CStateManager;
class CTransform4f;
class CGameCollision {
public:
@@ -14,6 +15,15 @@ public:
const CTransform4f&, const CMaterialFilter&);
static bool DetectDynamicCollisionBoolean(const CCollisionPrimitive&, const CTransform4f&,
const TEntityList&, const CStateManager&);
static void BuildAreaCollisionCache(const CStateManager& mgr, CAreaCollisionCache& cache);
static bool DetectCollisionBoolean_Cached(const CStateManager& mgr, CAreaCollisionCache& cache,
const CCollisionPrimitive& prim, const CTransform4f& xf,
const CMaterialFilter& filter,
const TEntityList& nearList);
static bool DetectCollision_Cached_Moving(const CStateManager&, CAreaCollisionCache&,
const CCollisionPrimitive&, const CTransform4f&,
const CMaterialFilter&, const TEntityList&, CVector3f,
TUniqueId&, CCollisionInfo&, f64&);
};
#endif
#endif

View File

@@ -60,6 +60,7 @@ public:
CRayCastResult RayWorldIntersection(TUniqueId& idOut, const CVector3f& pos, const CVector3f& dir,
f32 length, const CMaterialFilter& filter,
const TEntityList& list) const;
void BuildColliderList(TEntityList& out, const CActor& actor, const CAABox& aabb) const;
CEntity* ObjectById(TUniqueId uid);
const CEntity* GetObjectById(TUniqueId uid) const;

View File

@@ -44,7 +44,8 @@ public:
const CVector3f& GetLookAtPosition() const { return x20_scaledWorldPos; }
const CVector3f& GetLineOfSight() const;
const CVector3f& GetPosition() const { return x8_lastLocalPos; }
uint GetOcclusionCount() const { return x4c_occlusionCount; }
int GetOcclusionCount() const { return x4c_occlusionCount; }
f32 GetScale() const { return x50_scale; }
void SetRadius(f32 radius) { this->x4_radius = radius; }
// TODO
@@ -53,7 +54,8 @@ public:
void SetDesiredPosition(CVector3f vec) { x14_localPos = vec; }
void SetLookAtPosition(CVector3f vec) { x20_scaledWorldPos = vec; }
void SetLineOfSight();
void SetOcclusionCount(uint val) { x4c_occlusionCount = val; }
void SetOcclusionCount(int val) { x4c_occlusionCount = val; }
void SetScale(f32 val) { x50_scale = val; }
private:
f32 x4_radius;
@@ -62,9 +64,7 @@ private:
CVector3f x20_scaledWorldPos; // look at position
CVector3f x2c_lastWorldPos; // real position
CCameraSpring x38_spring;
public: // TODO
uint x4c_occlusionCount;
int x4c_occlusionCount;
f32 x50_scale;
};
@@ -126,6 +126,18 @@ public:
void UpdateColliders(const CTransform4f& xf, rstl::vector< CCameraCollider >& colliderList,
int& idx, int count, float tolerance, const TEntityList& nearList, f32 dt,
CStateManager& mgr);
CVector3f CalculateCollidersCentroid(const rstl::vector< CCameraCollider >& colliderList,
int numObscured) const;
CVector3f ApplyColliders();
int CountObscuredColliders(const rstl::vector< CCameraCollider >& colliderList) const;
CAABox CalculateCollidersBoundingBox(const rstl::vector< CCameraCollider >& colliderList,
const CStateManager&) const;
CVector3f AvoidGeometryFull(const CTransform4f& xf, const TEntityList& nearList, f32 dt,
CStateManager& mgr);
CVector3f AvoidGeometry(const CTransform4f& xf, const TEntityList& nearList, f32 dt,
CStateManager& mgr);
bool DetectCollision(const CVector3f& from, const CVector3f& to, f32 radius, f32& d,
CStateManager& mgr);
const CVector3f& GetLookAtPosition() const { return x1d8_lookPos; }
f32 GetDistance() const { return x190_curMinDistance; }
@@ -226,7 +238,7 @@ private:
f32 x30c_speedingTime;
CVector3f x310_idealLookVec;
CVector3f x31c_predictedLookPos;
uint x328_avoidGeomCycle;
int x328_avoidGeomCycle;
f32 x32c_colliderMag;
f32 x330_clearColliderThreshold;
CAABox x334_collidersAABB;