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 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
33 using namespace Opcode
;
35 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
39 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
40 VolumeCollider::VolumeCollider() :
41 mTouchedPrimitives (null
),
43 mNbVolumePrimTests (0)
47 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
51 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
52 VolumeCollider::~VolumeCollider()
54 mTouchedPrimitives
= null
;
57 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
59 * Validates current settings. You should call this method after all the settings / callbacks have been defined for a collider.
60 * \return null if everything is ok, else a string describing the problem
62 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
63 const char* VolumeCollider::ValidateSettings()
68 // Pretty dumb way to dump - to do better - one day...
70 #define IMPLEMENT_NOLEAFDUMP(type) \
71 void VolumeCollider::_Dump(const type* node) \
73 if(node->HasPosLeaf()) mTouchedPrimitives->Add(udword(node->GetPosPrimitive())); \
74 else _Dump(node->GetPos()); \
76 if(ContactFound()) return; \
78 if(node->HasNegLeaf()) mTouchedPrimitives->Add(udword(node->GetNegPrimitive())); \
79 else _Dump(node->GetNeg()); \
82 #define IMPLEMENT_LEAFDUMP(type) \
83 void VolumeCollider::_Dump(const type* node) \
87 mTouchedPrimitives->Add(udword(node->GetPrimitive())); \
91 _Dump(node->GetPos()); \
93 if(ContactFound()) return; \
95 _Dump(node->GetNeg()); \
99 IMPLEMENT_NOLEAFDUMP(AABBNoLeafNode
)
100 IMPLEMENT_NOLEAFDUMP(AABBQuantizedNoLeafNode
)
102 IMPLEMENT_LEAFDUMP(AABBCollisionNode
)
103 IMPLEMENT_LEAFDUMP(AABBQuantizedNode
)