ScummVM API documentation
CollideShape.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 /*
23  * Copyright (C) 2006-2010 - Frictional Games
24  *
25  * This file is part of HPL1 Engine.
26  */
27 
28 #ifndef HPL_COLLIDE_SHAPE_H
29 #define HPL_COLLIDE_SHAPE_H
30 
31 #include "hpl1/engine/math/BoundingVolume.h"
32 #include "hpl1/engine/math/MathTypes.h"
33 
34 namespace hpl {
35 
36 enum eCollideShapeType {
37  eCollideShapeType_Null,
38  eCollideShapeType_Box,
39  eCollideShapeType_Sphere,
40  eCollideShapeType_Cylinder,
41  eCollideShapeType_Capsule,
42  eCollideShapeType_ConvexHull,
43  eCollideShapeType_Mesh,
44  eCollideShapeType_Compound,
45  eCollideShapeType_LastEnum
46 };
47 
48 class iPhysicsWorld;
49 
51 public:
52  iCollideShape(iPhysicsWorld *apWorld) : mlUserCount(0), mpWorld(apWorld) {}
53  virtual ~iCollideShape() {}
54 
55  virtual iCollideShape *GetSubShape(int alIdx) = 0;
56  virtual int GetSubShapeNum() = 0;
57 
58  cVector3f GetSize() { return mvSize; }
59 
60  float GetRadius() { return mvSize.x; }
61  float GetHeight() { return mvSize.y; }
62  float GetWidth() { return mvSize.x; }
63  float GetDepth() { return mvSize.z; }
64 
65  const cMatrixf &GetOffset() { return m_mtxOffset; }
66 
67  eCollideShapeType GetType() { return mType; }
68 
69  void IncUserCount() { mlUserCount++; }
70  void DecUserCount() { mlUserCount--; }
71 
72  bool HasUsers() { return mlUserCount > 0; }
73  int GetUserCount() { return mlUserCount; }
74 
75  float GetVolume() { return mfVolume; }
76 
77  cBoundingVolume &GetBoundingVolume() { return mBoundingVolume; }
78 
79 protected:
80  cVector3f mvSize;
81  eCollideShapeType mType;
82  cMatrixf m_mtxOffset;
83 
84  int mlUserCount;
85 
86  iPhysicsWorld *mpWorld;
87  float mfVolume;
88 
89  cBoundingVolume mBoundingVolume;
90 };
91 
92 } // namespace hpl
93 
94 #endif // HPL_COLLIDE_SHAPE_H
Definition: AI.h:36
Definition: PhysicsWorld.h:115
Definition: BoundingVolume.h:71
Definition: CollideShape.h:50