00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "boxcollider.h"
00024
00025 using namespace oxygen;
00026 using namespace salt;
00027
00028 BoxCollider::BoxCollider() : Collider()
00029 {
00030 }
00031
00032 void
00033 BoxCollider::SetBoxLengths(const Vector3f& extents)
00034 {
00035 dGeomBoxSetLengths(
00036 mODEGeom,
00037 extents[0],
00038 extents[1],
00039 extents[2]
00040 );
00041 }
00042
00043 bool
00044 BoxCollider::ConstructInternal()
00045 {
00046 if (! Collider::ConstructInternal())
00047 {
00048 return false;
00049 }
00050
00051
00052 mODEGeom = dCreateBox (0, 1.0f, 1.0f, 1.0f);
00053
00054 return (mODEGeom != 0);
00055 }
00056
00057 void
00058 BoxCollider::GetBoxLengths(Vector3f& extents)
00059 {
00060 dVector3 lengths;
00061 dGeomBoxGetLengths(mODEGeom,lengths);
00062 extents[0] = lengths[0];
00063 extents[1] = lengths[1];
00064 extents[2] = lengths[2];
00065 }
00066
00067 float
00068 BoxCollider::GetBoxLength(int axis)
00069 {
00070 if (
00071 (axis<0) ||
00072 (axis>2)
00073 )
00074 {
00075 return 0;
00076 }
00077
00078 Vector3f extents;
00079 GetBoxLengths(extents);
00080 return extents[axis];
00081 }
00082
00083 float
00084 BoxCollider::GetPointDepth(const Vector3f& pos)
00085 {
00086 Vector3f worldPos(GetWorldTransform() * pos);
00087 return dGeomBoxPointDepth
00088 (mODEGeom,worldPos[0],worldPos[1],worldPos[2]);
00089 }
00090
00091