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
34namespace hpl {
35
36enum 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
48class iPhysicsWorld;
49
51public:
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
79protected:
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: BoundingVolume.h:71
Definition: CollideShape.h:50
Definition: PhysicsWorld.h:115