1 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3 * OPCODE - Optimized Collision Detection
4 * Copyright (C) 2001 Pierre Terdiman
5 * Homepage: http://www.codercorner.com/Opcode.htm
7 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11 * Contains base volume collider class.
12 * \file OPC_VolumeCollider.cpp
13 * \author Pierre Terdiman
16 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
18 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
20 * Contains the abstract class for volume colliders.
22 * \class VolumeCollider
23 * \author Pierre Terdiman
27 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
29 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
32 using namespace Opcode
;
34 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
38 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
39 VolumeCollider::VolumeCollider() :
40 mTouchedPrimitives (null
),
42 mNbVolumePrimTests (0)
46 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
50 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
51 VolumeCollider::~VolumeCollider()
53 mTouchedPrimitives
= null
;
56 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
58 * Validates current settings. You should call this method after all the settings / callbacks have been defined for a collider.
59 * \return null if everything is ok, else a string describing the problem
61 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
62 const char* VolumeCollider::ValidateSettings()
67 // Pretty dumb way to dump - to do better - one day...
69 #define IMPLEMENT_NOLEAFDUMP(type) \
70 void VolumeCollider::_Dump(const type* node) \
72 if(node->HasPosLeaf()) mTouchedPrimitives->Add(node->GetPosPrimitive()); \
73 else _Dump(node->GetPos()); \
75 if(ContactFound()) return; \
77 if(node->HasNegLeaf()) mTouchedPrimitives->Add(node->GetNegPrimitive()); \
78 else _Dump(node->GetNeg()); \
81 #define IMPLEMENT_LEAFDUMP(type) \
82 void VolumeCollider::_Dump(const type* node) \
86 mTouchedPrimitives->Add(node->GetPrimitive()); \
90 _Dump(node->GetPos()); \
92 if(ContactFound()) return; \
94 _Dump(node->GetNeg()); \
98 IMPLEMENT_NOLEAFDUMP(AABBNoLeafNode
)
99 IMPLEMENT_NOLEAFDUMP(AABBQuantizedNoLeafNode
)
101 IMPLEMENT_LEAFDUMP(AABBCollisionNode
)
102 IMPLEMENT_LEAFDUMP(AABBQuantizedNode
)