1 | /*
|
---|
2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
4 | */
|
---|
5 |
|
---|
6 | #ifndef _FCD_PHYSICS_SHAPE_H_
|
---|
7 | #define _FCD_PHYSICS_SHAPE_H_
|
---|
8 |
|
---|
9 | #include "FCDocument/FCDEntity.h"
|
---|
10 | #include "FCDocument/FCDEntityInstance.h"
|
---|
11 | #include "FUtils/FUDaeEnum.h"
|
---|
12 |
|
---|
13 | class FCDocument;
|
---|
14 | class FCDPhysicsRigidBody;
|
---|
15 | class FCDPhysicsRigidConstraint;
|
---|
16 | class FCDGeometryInstance;
|
---|
17 | class FCDPhysicsAnalyticalGeometry;
|
---|
18 | class FCDTransform;
|
---|
19 |
|
---|
20 | typedef vector<FCDTransform*> FCDTransformList;
|
---|
21 | typedef vector<FCDPhysicsRigidBody*> FCDPhysicsRigidBodyList;
|
---|
22 |
|
---|
23 | class FCOLLADA_EXPORT FCDPhysicsShape : public FCDEntity
|
---|
24 | {
|
---|
25 | private:
|
---|
26 | DeclareObjectType;
|
---|
27 |
|
---|
28 | bool hollow;
|
---|
29 | FCDPhysicsMaterial* physicsMaterial;
|
---|
30 | bool ownsPhysicsMaterial;
|
---|
31 |
|
---|
32 | //one of these two will define the rigid body
|
---|
33 | FCDGeometryInstance* geometry;
|
---|
34 | FCDPhysicsAnalyticalGeometry* analGeom; //pun not intended
|
---|
35 |
|
---|
36 | bool ownsGeometryInstance;
|
---|
37 |
|
---|
38 | float mass;
|
---|
39 | float density;
|
---|
40 | FCDTransformList transforms;
|
---|
41 |
|
---|
42 |
|
---|
43 | public:
|
---|
44 | FCDPhysicsShape(FCDocument* document);
|
---|
45 | virtual ~FCDPhysicsShape();
|
---|
46 |
|
---|
47 | // Returns the entity type
|
---|
48 | virtual Type GetType() const { return PHYSICS_SHAPE; }
|
---|
49 |
|
---|
50 | const float& GetMass() const {return mass;}
|
---|
51 | void SetMass(float _mass) {mass = _mass;}
|
---|
52 | const float& GetDensity() const {return density;}
|
---|
53 | void SetDensity(float _density) {density = _density;}
|
---|
54 | FCDPhysicsAnalyticalGeometry* GetAnalyticalGeometry() const {return analGeom;}
|
---|
55 | void SetAnalyticalGeometry(FCDPhysicsAnalyticalGeometry* _analGeom) {analGeom = _analGeom;}
|
---|
56 | FCDGeometryInstance* GetGeometryInstance() const {return geometry;}
|
---|
57 | void SetGeometryInstance(FCDGeometryInstance* _geometry) {geometry = _geometry;}
|
---|
58 | void SetGeometryInstanceOwnership(bool val) {ownsGeometryInstance = val;}
|
---|
59 | FCDPhysicsMaterial* GetPhysicsMaterial() const {return physicsMaterial;}
|
---|
60 | void SetPhysicsMaterial(FCDPhysicsMaterial* _physicsMaterial) {physicsMaterial = _physicsMaterial;}
|
---|
61 | bool ownsItsPhysicsMaterial() const {return ownsPhysicsMaterial;}
|
---|
62 | void SetOwnsPhysicsMaterial(bool _ownsPhysicsMaterial) {ownsPhysicsMaterial = _ownsPhysicsMaterial;}
|
---|
63 | bool isHollow() const {return hollow;}
|
---|
64 | void SetHollow(bool _hollow) {hollow = _hollow;}
|
---|
65 | const FCDTransformList& GetTransforms() const {return transforms;}
|
---|
66 | void AddTransform(FCDTransform* t) {transforms.push_back(t);}
|
---|
67 |
|
---|
68 | // Create a copy of this shape
|
---|
69 | FCDPhysicsShape* Clone();
|
---|
70 |
|
---|
71 | // Read in the <physics_shape> node of the COLLADA document
|
---|
72 | virtual FUStatus LoadFromXML(xmlNode* node);
|
---|
73 |
|
---|
74 | // Write out the <physics_shape> node to the COLLADA xml tree
|
---|
75 | virtual xmlNode* WriteToXML(xmlNode* parentNode) const;
|
---|
76 | };
|
---|
77 |
|
---|
78 | #endif // _FCD_PHYSICS_SHAPE_H_
|
---|