imesh/skeleton2.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2008 by Marten Svanfeldt 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifndef __CS_IMESH_SKELETON2_H__ 00020 #define __CS_IMESH_SKELETON2_H__ 00021 00022 #include "csutil/scf_interface.h" 00023 #include "csutil/ref.h" 00024 #include "csutil/refcount.h" 00025 #include "csutil/bitarray.h" 00026 #include "csgeom/quaternion.h" 00027 #include "csgeom/vector3.h" 00028 00029 class csDualQuaternion; 00030 00035 struct iSceneNode; 00036 00037 namespace CS { 00038 namespace Mesh { 00039 00040 struct iAnimatedMesh; 00041 00042 } // namespace Mesh 00043 } // namespace CS 00044 00045 namespace CS { 00046 namespace Animation { 00047 00048 struct iSkeletonFactory; 00049 struct iSkeleton; 00050 00051 class AnimatedMeshState; 00052 00053 struct iSkeletonAnimPacketFactory; 00054 struct iSkeletonAnimPacket; 00055 00063 00064 typedef size_t BoneID; 00065 00067 static const BoneID InvalidBoneID = (BoneID)~0; 00068 00073 struct iSkeletonManager : public virtual iBase 00074 { 00075 SCF_INTERFACE(CS::Animation::iSkeletonManager, 1, 0, 0); 00076 00080 virtual iSkeletonFactory* CreateSkeletonFactory (const char* name) = 0; 00081 00085 virtual iSkeletonFactory* FindSkeletonFactory (const char* name) = 0; 00086 00090 virtual void ClearSkeletonFactories () = 0; 00091 00095 virtual iSkeletonAnimPacketFactory* CreateAnimPacketFactory (const char* name) = 0; 00096 00100 virtual iSkeletonAnimPacketFactory* FindAnimPacketFactory (const char* name) = 0; 00101 00105 virtual void ClearAnimPacketFactories () = 0; 00106 00110 virtual void ClearAll () = 0; 00111 }; 00112 00124 struct iSkeletonFactory : public virtual iBase 00125 { 00126 SCF_INTERFACE(CS::Animation::iSkeletonFactory, 1, 0, 4); 00127 00137 virtual BoneID CreateBone (BoneID parent = CS::Animation::InvalidBoneID) = 0; 00138 00143 virtual BoneID FindBone (const char *name) const = 0; 00144 00150 virtual void RemoveBone (BoneID bone) = 0; 00151 00158 virtual BoneID GetBoneParent (BoneID bone) const = 0; 00159 00163 virtual bool HasBone (BoneID bone) const = 0; 00164 00168 virtual void SetBoneName (BoneID bone, const char* name) = 0; 00169 00173 virtual const char* GetBoneName (BoneID bone) const = 0; 00174 00178 virtual BoneID GetTopBoneID () const = 0; 00179 00186 virtual void GetTransformBoneSpace (BoneID bone, csQuaternion& rot, 00187 csVector3& offset) const = 0; 00188 00195 virtual void SetTransformBoneSpace (BoneID bone, const csQuaternion& rot, 00196 const csVector3& offset) = 0; 00197 00204 virtual void GetTransformAbsSpace (BoneID bone, csQuaternion& rot, 00205 csVector3& offset) const = 0; 00206 00219 virtual void SetTransformAbsSpace (BoneID bone, const csQuaternion& rot, 00220 const csVector3& offset) = 0; 00221 00227 virtual csPtr<iSkeleton> CreateSkeleton () = 0; 00228 00232 virtual iSkeletonAnimPacketFactory* GetAnimationPacket () const = 0; 00233 00237 virtual void SetAnimationPacket (iSkeletonAnimPacketFactory* fact) = 0; 00238 00247 virtual void SetAutoStart (bool autostart) = 0; 00248 00253 virtual bool GetAutoStart () = 0; 00254 00258 virtual csString Description () const = 0; 00259 00264 virtual const csArray<CS::Animation::BoneID>& GetBoneOrderList () = 0; 00265 00269 virtual const char* GetName () const = 0; 00270 }; 00271 00284 struct iSkeleton : public virtual iBase 00285 { 00286 SCF_INTERFACE(CS::Animation::iSkeleton, 1, 0, 3); 00287 00291 virtual iSceneNode* GetSceneNode () = 0; 00292 00302 virtual void GetTransformBoneSpace (BoneID bone, csQuaternion& rot, 00303 csVector3& offset) const = 0; 00304 00311 virtual void SetTransformBoneSpace (BoneID bone, const csQuaternion& rot, 00312 const csVector3& offset) = 0; 00313 00320 virtual void GetTransformAbsSpace (BoneID bone, csQuaternion& rot, 00321 csVector3& offset) const = 0; 00322 00336 virtual void SetTransformAbsSpace (BoneID bone, const csQuaternion& rot, 00337 const csVector3& offset) = 0; 00338 00345 virtual void GetTransformBindSpace (BoneID bone, csQuaternion& rot, 00346 csVector3& offset) const = 0; 00347 00348 00362 virtual void SetTransformBindSpace (BoneID bone, const csQuaternion& rot, 00363 const csVector3& offset) = 0; 00364 00368 virtual csPtr<AnimatedMeshState> GetStateAbsSpace () = 0; 00369 00373 virtual csPtr<AnimatedMeshState> GetStateBoneSpace () = 0; 00374 00378 virtual csPtr<AnimatedMeshState> GetStateBindSpace () = 0; 00379 00385 virtual iSkeletonFactory* GetFactory () const = 0; 00386 00387 00391 virtual iSkeletonAnimPacket* GetAnimationPacket () const = 0; 00392 00396 virtual void SetAnimationPacket (iSkeletonAnimPacket* packet) = 0; 00397 00401 virtual void RecreateSkeleton () = 0; 00402 00406 virtual void RecreateAnimationTree () = 0; 00407 00413 virtual void UpdateSkeleton (float dt) = 0; 00414 00419 virtual unsigned int GetSkeletonStateVersion () const = 0; 00420 00424 virtual void SetAnimatedMesh (CS::Mesh::iAnimatedMesh* animesh) = 0; 00425 00429 virtual CS::Mesh::iAnimatedMesh* GetAnimatedMesh () = 0; 00430 00435 virtual void ResetSkeletonState () = 0; 00436 }; 00437 00443 class AnimatedMeshState : public csRefCount 00444 { 00445 public: 00446 00448 AnimatedMeshState () 00449 : boneVecs (0), boneQuats (0), numberOfBones (0) 00450 {} 00451 00453 virtual inline ~AnimatedMeshState () 00454 { 00455 delete[] boneVecs; 00456 delete[] boneQuats; 00457 } 00458 00463 inline const csVector3& GetVector (size_t i) const 00464 { 00465 return boneVecs[i]; 00466 } 00467 00472 inline csVector3& GetVector (size_t i) 00473 { 00474 return boneVecs[i]; 00475 } 00476 00477 00482 inline const csQuaternion& GetQuaternion (size_t i) const 00483 { 00484 return boneQuats[i]; 00485 } 00486 00491 inline csQuaternion& GetQuaternion (size_t i) 00492 { 00493 return boneQuats[i]; 00494 } 00495 00501 inline bool IsBoneUsed (BoneID bone) const 00502 { 00503 return bitSet.IsBitSet (bone); 00504 } 00505 00510 inline void SetBoneUsed (BoneID bone) 00511 { 00512 bitSet.SetBit (bone); 00513 } 00514 00518 inline size_t GetBoneCount () const 00519 { 00520 return numberOfBones; 00521 } 00522 00527 inline void Setup (size_t numBones) 00528 { 00529 delete[] boneVecs; 00530 delete[] boneQuats; 00531 00532 bitSet.SetSize (numBones); 00533 bitSet.Clear (); 00534 boneVecs = new csVector3 [numBones]; 00535 boneQuats = new csQuaternion [numBones]; 00536 numberOfBones = numBones; 00537 00538 for (size_t i = 0; i < numBones; ++i) 00539 boneVecs[i].Set (0,0,0); 00540 } 00541 00545 inline void Reset () 00546 { 00547 bitSet.Clear (); 00548 } 00549 00550 protected: 00551 csBitArray bitSet; 00552 csVector3* boneVecs; 00553 csQuaternion* boneQuats; 00554 size_t numberOfBones; 00555 }; 00556 00557 00558 } // namespace Animation 00559 } // namespace CS 00560 00561 CS_DEPRECATED_METHOD_MSG("Use CS::Animation::AnimatedMeshState instead") 00562 typedef CS::Animation::AnimatedMeshState csSkeletalState2; 00563 CS_DEPRECATED_METHOD_MSG("Use CS::Animation::iSkeleton instead") 00564 typedef CS::Animation::iSkeleton iSkeleton2; 00565 CS_DEPRECATED_METHOD_MSG("Use CS::Animation::iSkeletonFactory instead") 00566 typedef CS::Animation::iSkeletonFactory iSkeletonFactory2; 00567 CS_DEPRECATED_METHOD_MSG("Use CS::Animation::iSkeletonManager instead") 00568 typedef CS::Animation::iSkeletonManager iSkeletonManager2; 00569 00575 #endif // __CS_IMESH_SKELETON2_H__ 00576
Generated for Crystal Space 2.1 by doxygen 1.6.1
