108 lines
2.6 KiB
C++
Executable File
108 lines
2.6 KiB
C++
Executable File
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
// Copyright (C) GarageGames.com, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef _EXTRUDEDPOLYLIST_H_
|
|
#define _EXTRUDEDPOLYLIST_H_
|
|
|
|
#ifndef _MMATH_H_
|
|
#include "math/mMath.h"
|
|
#endif
|
|
#ifndef _TVECTOR_H_
|
|
#include "core/tVector.h"
|
|
#endif
|
|
#ifndef _ABSTRACTPOLYLIST_H_
|
|
#include "collision/abstractPolyList.h"
|
|
#endif
|
|
|
|
struct Polyhedron;
|
|
struct CollisionList;
|
|
|
|
//----------------------------------------------------------------------------
|
|
/// Extruded Polytope PolyList
|
|
///
|
|
/// This class is used primarily for collision detection, by objects which need
|
|
/// to check for obstructions along their path. You feed it a polytope to
|
|
/// extrude along the direction of movement, and it gives you a list of collisions.
|
|
///
|
|
/// @see AbstractPolyList
|
|
class ExtrudedPolyList: public AbstractPolyList
|
|
{
|
|
public:
|
|
struct Vertex {
|
|
Point3F point;
|
|
U32 mask;
|
|
};
|
|
|
|
struct Poly {
|
|
PlaneF plane;
|
|
SceneObject* object;
|
|
U32 material;
|
|
};
|
|
|
|
struct ExtrudedFace {
|
|
bool active;
|
|
PlaneF plane;
|
|
F32 maxDistance;
|
|
U32 planeMask;
|
|
F32 faceDot;
|
|
F32 faceShift;
|
|
F32 time;
|
|
Point3F point;
|
|
F32 height;
|
|
};
|
|
|
|
typedef Vector<ExtrudedFace> ExtrudedList;
|
|
typedef Vector<PlaneF> PlaneList;
|
|
typedef Vector<Vertex> VertexList;
|
|
typedef Vector<U32> IndexList;
|
|
|
|
static F32 EqualEpsilon;
|
|
static F32 FaceEpsilon;
|
|
|
|
// Internal data
|
|
VertexList mVertexList;
|
|
IndexList mIndexList;
|
|
ExtrudedList mExtrudedList;
|
|
PlaneList mPlaneList;
|
|
VectorF mVelocity;
|
|
VectorF mNormalVelocity;
|
|
F32 mFaceShift;
|
|
Poly mPoly;
|
|
|
|
// Returned info
|
|
CollisionList* mCollisionList;
|
|
|
|
PlaneList mPolyPlaneList;
|
|
|
|
//
|
|
private:
|
|
bool testPoly(ExtrudedFace&);
|
|
|
|
public:
|
|
ExtrudedPolyList();
|
|
~ExtrudedPolyList();
|
|
void extrude(const Polyhedron&, const VectorF& vec);
|
|
void setVelocity(const VectorF& velocity);
|
|
void setCollisionList(CollisionList*);
|
|
void adjustCollisionTime();
|
|
void render();
|
|
|
|
// Virtual methods
|
|
bool isEmpty() const;
|
|
U32 addPoint(const Point3F& p);
|
|
U32 addPlane(const PlaneF& plane);
|
|
void begin(U32 material, U32 surfaceKey);
|
|
void plane(U32 v1,U32 v2,U32 v3);
|
|
void plane(const PlaneF& p);
|
|
void plane(const U32 index);
|
|
void vertex(U32 vi);
|
|
void end();
|
|
|
|
protected:
|
|
const PlaneF& getIndexedPlane(const U32 index);
|
|
};
|
|
|
|
#endif
|