22 #ifndef SCUMM_HE_BASKETBALL_COLLISION_BBALL_COLLISION_SPHERE_H 23 #define SCUMM_HE_BASKETBALL_COLLISION_BBALL_COLLISION_SPHERE_H 27 #include "scumm/he/basketball/collision/bball_collision_object.h" 28 #include "scumm/he/basketball/collision/bball_collision_stack.h" 32 const int BOUNCE_SPEED_LIMIT = 20;
33 const int ROLL_SPEED_LIMIT = 20;
34 const int ROLL_SLOWDOWN_FREQUENCY = 10;
36 class CCollisionSphere :
public ICollisionObject,
public U32Sphere {
38 CCollisionSphere() : ICollisionObject(kSphere),
40 _positionSaved(false) {}
42 ~CCollisionSphere() {}
44 using ICollisionObject::getObjectDistance;
45 float getObjectDistance(
const CCollisionBox &targetObject)
const override;
46 float getObjectDistance(
const CCollisionCylinder &targetObject)
const override;
48 using ICollisionObject::testObjectIntersection;
49 bool testObjectIntersection(
const CCollisionBox &targetObject, U32Distance3D *pDistance)
const override;
50 bool testObjectIntersection(
const CCollisionCylinder &targetObject, U32Distance3D *pDistance)
const override;
52 using ICollisionObject::validateCollision;
53 bool validateCollision(
const CCollisionBox &targetObject, U32Distance3D *pDistance)
override;
54 bool validateCollision(
const CCollisionCylinder &targetObject, U32Distance3D *pDistance)
override;
56 using ICollisionObject::backOutOfObject;
57 bool backOutOfObject(
const CCollisionBox &targetObject, U32Distance3D *pDistance,
float *pTimeUsed)
override;
58 bool backOutOfObject(
const CCollisionCylinder &targetObject, U32Distance3D *pDistance,
float *pTimeUsed)
override;
60 using ICollisionObject::nudgeObject;
61 bool nudgeObject(
const CCollisionBox &targetObject, U32Distance3D *pDistance,
float *pTimeUsed)
override;
62 bool nudgeObject(
const CCollisionCylinder &targetObject, U32Distance3D *pDistance,
float *pTimeUsed)
override;
64 void handleCollisions(CCollisionObjectVector *pCollisionVector,
float *pTimeUsed,
bool advanceObject)
override;
66 using ICollisionObject::isOnObject;
67 bool isOnObject(
const CCollisionBox &targetObject,
const U32Distance3D &distance)
const override;
68 bool isOnObject(
const CCollisionCylinder &targetObject,
const U32Distance3D &distance)
const override;
70 U32BoundingBox getBoundingBox()
const override;
71 U32BoundingBox getBigBoundingBox()
const override;
74 void restore()
override;
80 float getDimensionDistance(
const CCollisionBox &targetObject, EDimension dimension)
const;
81 float getDimensionDistance(
const CCollisionCylinder &targetObject, EDimension dimension)
const;
85 U32FltPoint3D _safetyPoint;
86 U32FltVector3D _safetyVelocity;
88 bool backStraightOutOfObject(
const ICollisionObject &targetObject, U32Distance3D *pDistance,
float *pTimeUsed);
90 using ICollisionObject::defineReflectionPlane;
91 void defineReflectionPlane(
const CCollisionBox &targetObject,
const U32Distance3D &distance, U32Plane *collisionPlane)
const override;
92 void defineReflectionPlane(
const CCollisionCylinder &targetObject,
const U32Distance3D &distance, U32Plane *collisionPlane)
const override;
94 void reboundOffPlane(
const U32Plane &collisionPlane,
bool isOnPlane);
96 using ICollisionObject::getPenetrationTime;
97 float getPenetrationTime(
const CCollisionBox &targetObject,
const U32Distance3D &distance, EDimension dimension)
const override;
98 float getPenetrationTime(
const CCollisionCylinder &targetObject,
const U32Distance3D &distance, EDimension dimension)
const override;
100 void increaseVelocity(
float minSpeed);
108 #endif // SCUMM_HE_BASKETBALL_COLLISION_BBALL_COLLISION_SPHERE_H