Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __CS_IMESH_BODYMESH_H__
00022 #define __CS_IMESH_BODYMESH_H__
00023
00028 #include "csutil/scf_interface.h"
00029
00030 #include "imesh/animnode/skeleton2anim.h"
00031 #include "ivaria/dynamics.h"
00032
00036 namespace CS {
00037 namespace Animation {
00038
00039 struct iSkeletonFactory;
00040 struct iBodySkeleton;
00041 struct iBodyBone;
00042 struct iBodyChain;
00043 struct iBodyChainNode;
00044 struct iBodyBoneProperties;
00045 struct iBodyBoneJoint;
00046 struct iBodyBoneCollider;
00047
00051 struct iBodyManager : public virtual iBase
00052 {
00053 SCF_INTERFACE(CS::Animation::iBodyManager, 2, 0, 0);
00054
00058 virtual iBodySkeleton* CreateBodySkeleton
00059 (const char *name, iSkeletonFactory* skeletonFactory) = 0;
00060
00064 virtual iBodySkeleton* FindBodySkeleton (const char *name) = 0;
00065
00069 virtual void ClearBodySkeletons () = 0;
00070 };
00071
00078 struct iBodySkeleton : public virtual iBase
00079 {
00080 SCF_INTERFACE(CS::Animation::iBodySkeleton, 3, 0, 0);
00081
00085 virtual const char* GetName () const = 0;
00086
00090 virtual iSkeletonFactory* GetSkeletonFactory () const = 0;
00091
00095 virtual void ClearAll () = 0;
00096
00101 virtual iBodyBone* CreateBodyBone (BoneID boneID) = 0;
00102
00106 virtual iBodyBone* FindBodyBone (const char *name) const = 0;
00107
00111 virtual void ClearBodyBones () = 0;
00112
00119 virtual iBodyChain* CreateBodyChain (const char *name, BoneID rootBone) = 0;
00120
00124 virtual iBodyChain* FindBodyChain (const char *name) const = 0;
00125
00129 virtual void ClearBodyChains () = 0;
00130
00134 virtual iBodyBone* FindBodyBone (BoneID bone) const = 0;
00135 };
00136
00140 struct iBodyBone : public virtual iBase
00141 {
00142 SCF_INTERFACE(CS::Animation::iBodyBone, 1, 0, 0);
00143
00147 virtual BoneID GetAnimeshBone () const = 0;
00148
00154 virtual iBodyBoneProperties* CreateBoneProperties () = 0;
00155
00160 virtual iBodyBoneProperties* GetBoneProperties () const = 0;
00161
00166 virtual iBodyBoneJoint* CreateBoneJoint () = 0;
00167
00172 virtual iBodyBoneJoint* GetBoneJoint () const = 0;
00173
00177 virtual iBodyBoneCollider* CreateBoneCollider () = 0;
00178
00182 virtual size_t GetBoneColliderCount () const = 0;
00183
00187 virtual iBodyBoneCollider* GetBoneCollider (size_t index) const = 0;
00188 };
00189
00194 struct iBodyChain : public virtual iBase
00195 {
00196 SCF_INTERFACE(CS::Animation::iBodyChain, 2, 0, 0);
00197
00201 virtual const char* GetName () const = 0;
00202
00206 virtual iBodySkeleton* GetBodySkeleton () = 0;
00207
00211 virtual iBodyChainNode* GetRootNode () = 0;
00212
00221 virtual bool AddSubChain (CS::Animation::BoneID subBone) = 0;
00222
00227 virtual bool AddAllSubChains () = 0;
00228
00232 virtual void DebugPrint () const = 0;
00233
00239 virtual void PopulateBoneMask (csBitArray& boneMask) const = 0;
00240 };
00241
00246 struct iBodyChainNode : public virtual iBase
00247 {
00248 SCF_INTERFACE(CS::Animation::iBodyChainNode, 2, 0, 1);
00249
00253 virtual BoneID GetAnimeshBone () const = 0;
00254
00258 virtual size_t GetChildCount () const = 0;
00259
00263 virtual iBodyChainNode* GetChild (size_t index) const = 0;
00264
00269 virtual iBodyChainNode* GetParent () const = 0;
00270
00275 virtual iBodyChainNode* FindSubChild (CS::Animation::BoneID child) const = 0;
00276
00280 virtual void DebugPrint () const = 0;
00281 };
00282
00286 struct iBodyBoneProperties : public virtual iBase
00287 {
00288 SCF_INTERFACE(CS::Animation::iBodyBoneProperties, 1, 0, 0);
00289
00293 virtual void SetMass (float mass) = 0;
00294
00298 virtual float GetMass () const = 0;
00299
00303 virtual void SetCenter (const csVector3 ¢er) = 0;
00304
00308 virtual csVector3 GetCenter () const = 0;
00309
00313 virtual void SetInertia (const csMatrix3 &inertia) = 0;
00314
00318 virtual csMatrix3 GetInertia () const = 0;
00319 };
00320
00325 struct iBodyBoneJoint : public virtual iBase
00326 {
00327 SCF_INTERFACE(CS::Animation::iBodyBoneJoint, 1, 0, 0);
00328
00332 virtual void SetBounce (const csVector3 &bounce) = 0;
00333
00337 virtual void SetMaximumAngle (const csVector3 &max) = 0;
00338
00342 virtual void SetMaximumDistance (const csVector3 &max) = 0;
00343
00347 virtual void SetMinimumAngle (const csVector3 &min) = 0;
00348
00352 virtual void SetMinimumDistance (const csVector3 &min) = 0;
00353
00357 virtual void SetRotConstraints (bool X, bool Y, bool Z) = 0;
00358
00362 virtual void SetTransConstraints (bool X, bool Y, bool Z) = 0;
00363
00367 virtual void SetTransform (const csOrthoTransform &transform) = 0;
00368
00372 virtual csVector3 GetBounce () const = 0;
00373
00377 virtual csVector3 GetMaximumAngle () const = 0;
00378
00382 virtual csVector3 GetMaximumDistance () const = 0;
00383
00387 virtual csVector3 GetMinimumAngle () const = 0;
00388
00392 virtual csVector3 GetMinimumDistance () const = 0;
00393
00397 virtual bool IsXRotConstrained () const = 0;
00398
00402 virtual bool IsXTransConstrained () const = 0;
00403
00407 virtual bool IsYRotConstrained () const = 0;
00408
00412 virtual bool IsYTransConstrained () const = 0;
00413
00417 virtual bool IsZRotConstrained () const = 0;
00418
00422 virtual bool IsZTransConstrained () const = 0;
00423
00427 virtual csOrthoTransform GetTransform () const = 0;
00428 };
00429
00435 struct iBodyBoneCollider : public virtual iBase
00436 {
00437 SCF_INTERFACE(CS::Animation::iBodyBoneCollider, 2, 0, 1);
00438
00442 virtual bool SetBoxGeometry (const csVector3 &box_size) = 0;
00443
00447 virtual bool SetCapsuleGeometry (float length, float radius) = 0;
00448
00452 virtual bool SetConvexMeshGeometry (iMeshWrapper *mesh) = 0;
00453
00457 virtual bool SetCylinderGeometry (float length, float radius) = 0;
00458
00462 virtual bool SetMeshGeometry (iMeshWrapper *mesh) = 0;
00463
00467 virtual bool SetPlaneGeometry (const csPlane3 &plane) = 0;
00468
00472 virtual bool SetSphereGeometry (float radius) = 0;
00473
00477 virtual csColliderGeometryType GetGeometryType () const = 0;
00478
00483 virtual bool GetBoxGeometry (csVector3 &box_size) const = 0;
00484
00489 virtual bool GetCapsuleGeometry (float &length, float &radius) const = 0;
00490
00495 virtual bool GetConvexMeshGeometry (iMeshWrapper *&mesh) const = 0;
00496
00501 virtual bool GetCylinderGeometry (float &length, float &radius) const = 0;
00502
00507 virtual bool GetMeshGeometry (iMeshWrapper *&mesh) const = 0;
00508
00513 virtual bool GetPlaneGeometry (csPlane3 &plane) const = 0;
00514
00519 virtual bool GetSphereGeometry (float &radius) const = 0;
00520
00524 virtual void SetTransform (const csOrthoTransform &transform) = 0;
00525
00529 virtual csOrthoTransform GetTransform () const = 0;
00530
00534 virtual void SetFriction (float friction) = 0;
00535
00539 virtual float GetFriction () const = 0;
00540
00544 virtual void SetSoftness (float softness) = 0;
00545
00549 virtual float GetSoftness () const = 0;
00550
00554 virtual void SetElasticity (float elasticity) = 0;
00555
00559 virtual float GetElasticity () const = 0;
00560
00564 virtual void SetDensity (float density) = 0;
00565
00569 virtual float GetDensity () const = 0;
00570 };
00571
00572 }
00573 }
00574
00577 #endif // __CS_IMESH_BODYMESH_H__