Merge pull request #2240 from GarageGames/Release_3_10_1
[Torque-3d.git] / Engine / lib / opcode / OPC_VolumeCollider.cpp
blob21e65aaf1a95df630548a75491854c4d58b1aa7e
1 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2 /*
3 * OPCODE - Optimized Collision Detection
4 * Copyright (C) 2001 Pierre Terdiman
5 * Homepage: http://www.codercorner.com/Opcode.htm
6 */
7 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10 /**
11 * Contains base volume collider class.
12 * \file OPC_VolumeCollider.cpp
13 * \author Pierre Terdiman
14 * \date June, 2, 2001
16 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
18 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
19 /**
20 * Contains the abstract class for volume colliders.
22 * \class VolumeCollider
23 * \author Pierre Terdiman
24 * \version 1.3
25 * \date June, 2, 2001
27 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
29 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
30 #include "Opcode.h"
32 using namespace Opcode;
34 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
35 /**
36 * Constructor.
38 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
39 VolumeCollider::VolumeCollider() :
40 mTouchedPrimitives (null),
41 mNbVolumeBVTests (0),
42 mNbVolumePrimTests (0)
46 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
47 /**
48 * Destructor.
50 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
51 VolumeCollider::~VolumeCollider()
53 mTouchedPrimitives = null;
56 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
57 /**
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()
64 return null;
67 // Pretty dumb way to dump - to do better - one day...
69 #define IMPLEMENT_NOLEAFDUMP(type) \
70 void VolumeCollider::_Dump(const type* node) \
71 { \
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) \
83 { \
84 if(node->IsLeaf()) \
85 { \
86 mTouchedPrimitives->Add(node->GetPrimitive()); \
87 } \
88 else \
89 { \
90 _Dump(node->GetPos()); \
92 if(ContactFound()) return; \
94 _Dump(node->GetNeg()); \
95 } \
98 IMPLEMENT_NOLEAFDUMP(AABBNoLeafNode)
99 IMPLEMENT_NOLEAFDUMP(AABBQuantizedNoLeafNode)
101 IMPLEMENT_LEAFDUMP(AABBCollisionNode)
102 IMPLEMENT_LEAFDUMP(AABBQuantizedNode)