22 #ifndef SCUMM_HE_BASKETBALL_COLLISION_BBALL_COLLISION_OBJECT_H 23 #define SCUMM_HE_BASKETBALL_COLLISION_BBALL_COLLISION_OBJECT_H 27 #include "common/str.h" 29 #include "scumm/he/basketball/collision/bball_collision_support_obj.h" 30 #include "scumm/he/basketball/collision/bball_collision_stack.h" 34 #define COLLISION_EPSILON 0.5F 35 #define COLLISION_SMALL_TIME_INCREMENT 0.05F 36 #define COLLISION_BACK_OUT_TIME_LIMIT 20.0F 38 class CCollisionSphere;
40 class CCollisionCylinder;
41 class CCollisionObjectStack;
42 class CCollisionObjectVector;
61 class ICollisionObject {
63 ICollisionObject(EObjectShape shape = kNoObjectShape);
64 virtual ~ICollisionObject() {}
67 bool operator==(
const ICollisionObject &otherObject)
const;
70 virtual float getObjectDistance(
const ICollisionObject &targetObject)
const;
71 virtual float getObjectDistance(
const CCollisionSphere &targetObject)
const {
return 0.0F; }
72 virtual float getObjectDistance(
const CCollisionBox &targetObject)
const {
return 0.0F; }
73 virtual float getObjectDistance(
const CCollisionCylinder &targetObject)
const {
return 0.0F; }
76 virtual bool testObjectIntersection(
const ICollisionObject &targetObject, U32Distance3D *distance)
const;
77 virtual bool testObjectIntersection(
const CCollisionSphere &targetObject, U32Distance3D *distance)
const {
return false; }
78 virtual bool testObjectIntersection(
const CCollisionBox &targetObject, U32Distance3D *distance)
const {
return false; }
79 virtual bool testObjectIntersection(
const CCollisionCylinder &targetObject, U32Distance3D *distance)
const {
return false; }
84 virtual bool validateCollision(
const ICollisionObject &targetObject, U32Distance3D *distance);
85 virtual bool validateCollision(
const CCollisionSphere &targetObject, U32Distance3D *distance) {
return true; }
86 virtual bool validateCollision(
const CCollisionBox &targetObject, U32Distance3D *distance) {
return true; }
87 virtual bool validateCollision(
const CCollisionCylinder &targetObject, U32Distance3D *distance) {
return true; }
91 virtual bool backOutOfObject(
const ICollisionObject &targetObject, U32Distance3D *distance,
float *timeUsed);
92 virtual bool backOutOfObject(
const CCollisionSphere &targetObject, U32Distance3D *distance,
float *timeUsed) {
return true; }
93 virtual bool backOutOfObject(
const CCollisionBox &targetObject, U32Distance3D *distance,
float *timeUsed) {
return true; }
94 virtual bool backOutOfObject(
const CCollisionCylinder &targetObject, U32Distance3D *distance,
float *timeUsed) {
return true; }
99 virtual bool nudgeObject(
const ICollisionObject &targetObject, U32Distance3D *distance,
float *timeUsed);
100 virtual bool nudgeObject(
const CCollisionSphere &targetObject, U32Distance3D *distance,
float *timeUsed) {
return true; }
101 virtual bool nudgeObject(
const CCollisionBox &targetObject, U32Distance3D *distance,
float *timeUsed) {
return true; }
102 virtual bool nudgeObject(
const CCollisionCylinder &targetObject, U32Distance3D *distance,
float *timeUsed) {
return true; }
106 virtual bool isCollisionHandled(
const ICollisionObject &targetObject)
const;
107 virtual bool isCollisionHandled(
const CCollisionSphere &targetObject)
const {
return true; }
108 virtual bool isCollisionHandled(
const CCollisionBox &targetObject)
const {
return true; }
109 virtual bool isCollisionHandled(
const CCollisionCylinder &targetObject)
const {
return true; }
113 virtual void handleCollisions(CCollisionObjectVector *pCollisionVector,
float *timeUsed,
bool advanceObject);
114 virtual void handleCollision(
const CCollisionSphere &targetObject,
float *timeUsed, U32Distance3D *distance,
bool advanceObject) {}
115 virtual void handleCollision(
const CCollisionBox &targetObject,
float *timeUsed, U32Distance3D *distance,
bool advanceObject) {}
116 virtual void handleCollision(
const CCollisionCylinder &targetObject,
float *timeUsed, U32Distance3D *distance,
bool advanceObject) {}
120 virtual bool isOnObject(
const ICollisionObject &targetObject,
const U32Distance3D &distance)
const;
121 virtual bool isOnObject(
const CCollisionSphere &targetObject,
const U32Distance3D &distance)
const {
return false; }
122 virtual bool isOnObject(
const CCollisionBox &targetObject,
const U32Distance3D &distance)
const {
return false; }
123 virtual bool isOnObject(
const CCollisionCylinder &targetObject,
const U32Distance3D &distance)
const {
return false; }
126 virtual U32BoundingBox getBoundingBox()
const = 0;
127 virtual U32BoundingBox getBigBoundingBox()
const = 0;
130 virtual U32FltPoint3D findNearestPoint(
const U32FltPoint3D &testPoint)
const;
134 virtual void save() {}
138 virtual void restore() {}
141 EObjectShape _objectShape;
142 EObjectType _objectType;
145 U32FltVector3D _velocity;
147 float _collisionEfficiency;
163 CCollisionObjectVector _objectCollisionHistory;
167 CCollisionObjectVector _objectRollingHistory;
174 virtual float getPenetrationTime(
const ICollisionObject &targetObject,
const U32Distance3D &distance, EDimension dimension)
const;
175 virtual float getPenetrationTime(
const CCollisionSphere &targetObject,
const U32Distance3D &distance, EDimension dimension)
const {
return 0.0F; }
176 virtual float getPenetrationTime(
const CCollisionBox &targetObject,
const U32Distance3D &distance, EDimension dimension)
const {
return 0.0F; }
177 virtual float getPenetrationTime(
const CCollisionCylinder &targetObject,
const U32Distance3D &distance, EDimension dimension)
const {
return 0.0F; }
183 virtual void defineReflectionPlane(
const ICollisionObject &targetObject,
const U32Distance3D &distance, U32Plane *collisionPlane)
const;
184 virtual void defineReflectionPlane(
const CCollisionSphere &targetObject,
const U32Distance3D &distance, U32Plane *collisionPlane)
const;
185 virtual void defineReflectionPlane(
const CCollisionBox &targetObject,
const U32Distance3D &distance, U32Plane *collisionPlane)
const;
186 virtual void defineReflectionPlane(
const CCollisionCylinder &targetObject,
const U32Distance3D &distance, U32Plane *collisionPlane)
const;
193 #endif // SCUMM_HE_BASKETBALL_COLLISION_BBALL_COLLISION_OBJECT_H