12#ifndef TT_INCLUDE_COLTEST_H
13#define TT_INCLUDE_COLTEST_H
15#include "castresultstruct.h"
16#include "LineSegClass.h"
17#include "AABoxClass.h"
18#include "OBBoxClass.h"
21class SCRIPTS_API CollisionTestClass
24 CollisionTestClass(CastResultStruct * res,Collision_Type collision_type);
25 CollisionTestClass(
const CollisionTestClass & that);
27 CastResultStruct * Result;
28 Collision_Type CollisionType;
29 RenderObjClass * CollidedRenderObj;
32inline CollisionTestClass::CollisionTestClass(CastResultStruct * res,Collision_Type collision_type) :
34 CollisionType(collision_type),
35 CollidedRenderObj(NULL)
39inline CollisionTestClass::CollisionTestClass(
const CollisionTestClass & that) :
41 CollisionType(that.CollisionType),
42 CollidedRenderObj(that.CollidedRenderObj)
46class RayCollisionTestClass :
public CollisionTestClass
50 bool IgnoreTranslucentMeshes;
52 RayCollisionTestClass(
const LineSegClass& ray, CastResultStruct* res, Collision_Type collision_type = COLLISION_TYPE_0,
bool ignore_translucent_meshes =
false);
53 RayCollisionTestClass(
const RayCollisionTestClass& raytest,
const Matrix3D& tm);
55 bool Cull(
const Vector3& min,
const Vector3& max);
56 bool Cull(
const AABoxClass& box);
58 bool Cast_To_Triangle(
const TriClass& tri);
61 RayCollisionTestClass(
const RayCollisionTestClass &);
62 RayCollisionTestClass & operator = (
const RayCollisionTestClass &);
65inline RayCollisionTestClass::RayCollisionTestClass(
const LineSegClass& ray, CastResultStruct* res, Collision_Type collision_type,
bool ignore_translucent_meshes) :
66 CollisionTestClass(res, collision_type),
68 IgnoreTranslucentMeshes(ignore_translucent_meshes)
72inline RayCollisionTestClass::RayCollisionTestClass(
const RayCollisionTestClass& raytest,
const Matrix3D& tm) :
73 CollisionTestClass(raytest),
75 IgnoreTranslucentMeshes(raytest.IgnoreTranslucentMeshes)
79class SCRIPTS_API AABoxCollisionTestClass :
public CollisionTestClass
82 AABoxCollisionTestClass(
const AABoxClass & aabox,
const Vector3 & move,CastResultStruct * res,Collision_Type collision_type = COLLISION_TYPE_0);
83 AABoxCollisionTestClass(
const AABoxCollisionTestClass & that);
91 bool Cull(
const Vector3 & min,
const Vector3 & max);
92 bool Cull(
const AABoxClass & box);
93 void Translate(
const Vector3 & translation);
94 void Rotate(ROTATION_TYPE rotation);
95 void Transform(
const Matrix3D & tm);
102 AABoxCollisionTestClass & operator = (
const AABoxCollisionTestClass &);
105inline void AABoxCollisionTestClass::Translate(
const Vector3 & translation)
107 Box.Center += translation;
108 SweepMin += translation;
109 SweepMax += translation;
112inline bool AABoxCollisionTestClass::Cull(
const Vector3 & min,
const Vector3 & max)
114 if ((SweepMin.X > max.X) || (SweepMax.X < min.X))
118 if ((SweepMin.Y > max.Y) || (SweepMax.Y < min.Y))
122 if ((SweepMin.Z > max.Z) || (SweepMax.Z < min.Z))
129class SCRIPTS_API OBBoxCollisionTestClass :
public CollisionTestClass
132 OBBoxCollisionTestClass(
const OBBoxClass & obbox,
const Vector3 & move,CastResultStruct * res,Collision_Type type = COLLISION_TYPE_0);
133 OBBoxCollisionTestClass(
const OBBoxCollisionTestClass & that);
134 OBBoxCollisionTestClass(
const OBBoxCollisionTestClass & that,
const Matrix3D & tm);
135 OBBoxCollisionTestClass(
const AABoxCollisionTestClass & that,
const Matrix3D & tm);
136 bool Cull(
const Vector3 & min,
const Vector3 & max);
137 bool Cull(
const AABoxClass & box);
144 OBBoxCollisionTestClass & operator = (
const OBBoxCollisionTestClass &);
147inline bool OBBoxCollisionTestClass::Cull(
const Vector3 & min,
const Vector3 & max)
149 if ((SweepMin.X > max.X) || (SweepMax.X < min.X))
153 if ((SweepMin.Y > max.Y) || (SweepMax.Y < min.Y))
157 if ((SweepMin.Z > max.Z) || (SweepMax.Z < min.Z))