CrystalSpace

Public API Reference

imesh/skeleton.h
00001 /*
00002     Copyright (C) 2005 by Hristo Hristov
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_ISKELETON_H__
00020 #define __CS_ISKELETON_H__
00021 
00022 #include "csutil/scf.h"
00023 #include "csgeom/box.h"
00024 
00025 struct iSkeleton;
00026 struct iSkeletonGraveyard;
00027 struct iSkeletonFactory;
00028 struct iSkeletonBoneFactory;
00029 struct iSkeletonBoneUpdateCallback;
00030 struct iSkeletonSocket;
00031 struct iSkeletonSocketFactory;
00032 struct iSceneNode;
00033 //struct iSkeletonBoneRagdollInfo;
00034 
00035 /*
00036 struct iODEGeom;
00037 struct iODERigidBody;
00038 struct iODEJoint;
00039 struct iODEDynamicSystem;
00040 */
00041 
00042 enum csBoneTransformType
00043 {
00044   CS_BTT_NONE = 0,
00045   CS_BTT_SCRIPT,
00046   CS_BTT_RIGID_BODY
00047 };
00048 
00049 enum csBoneGeomType
00050 {
00051   CS_BGT_NONE = 0,
00052   CS_BGT_BOX,
00053   CS_BGT_SPHERE,
00054   CS_BGT_CYLINDER
00055 };
00056 
00057 class csReversibleTransform;
00058 
00062 struct iSkeletonBone : public virtual iBase
00063 {
00064   SCF_INTERFACE (iSkeletonBone, 1, 0, 1);
00065 
00069   virtual const char* GetName () const = 0;
00070 
00074   virtual void SetName (const char* name) = 0;
00075 
00079   virtual csReversibleTransform &GetTransform () = 0;
00080 
00084   virtual void SetTransform (const csReversibleTransform &transform) = 0;
00085 
00089   virtual csReversibleTransform &GetFullTransform () = 0;
00090 
00094   virtual void SetParent (iSkeletonBone *parent) = 0;
00095 
00099   virtual iSkeletonBone *GetParent () = 0;
00100 
00104   virtual size_t GetChildrenCount () = 0;
00105 
00109   virtual iSkeletonBone *GetChild (size_t i) = 0;
00110 
00114   virtual iSkeletonBone *FindChild (const char *name) = 0;
00115 
00119   virtual size_t FindChildIndex (iSkeletonBone *child) = 0;
00120 
00124   virtual void SetSkinBox (csBox3 &box) = 0;
00125 
00129   virtual csBox3 &GetSkinBox () = 0;
00130 
00135   virtual void SetUpdateCallback (iSkeletonBoneUpdateCallback *callback) = 0;
00136 
00140   virtual iSkeletonBoneUpdateCallback *GetUpdateCallback () = 0;
00141 
00145   virtual iSkeletonBoneFactory *GetFactory() = 0;
00146 
00154   virtual void SetTransformMode(csBoneTransformType mode) = 0;
00155 
00159   virtual csBoneTransformType GetTransformMode() = 0;
00160 
00161   //virtual void SetRigidBody(iODERigidBody *rigid_body, const csReversibleTransform & offset_transform) = 0;
00162   //virtual iODERigidBody *GetRigidBody() = 0;
00163   //virtual void SetJoint(iODEJoint *joint) = 0;
00164   //virtual iODEJoint *GetJoint() = 0;
00165 };
00166 
00170 struct iSkeletonBoneUpdateCallback : public virtual iBase
00171 {
00172   SCF_INTERFACE  (iSkeletonBoneUpdateCallback, 0, 0, 1);
00173 
00174   virtual void UpdateTransform(iSkeletonBone *bone,
00175       const csReversibleTransform & transform) = 0;
00176 };
00177 
00178 class csQuaternion;
00179 
00184 struct iSkeletonAnimationKeyFrame : public virtual iBase
00185 {
00186   SCF_INTERFACE (iSkeletonAnimationKeyFrame, 1, 0, 0);
00187 
00191   virtual const char* GetName () const = 0;
00192 
00196   virtual void SetName (const char* name) = 0;
00197 
00201   virtual csTicks GetDuration () = 0;
00202 
00206   virtual void SetDuration (csTicks time) = 0;
00207 
00211   virtual size_t GetTransformsCount() = 0;
00212 
00216   virtual void AddTransform (iSkeletonBoneFactory *bone, 
00217     csReversibleTransform &transform, bool relative = false) = 0;
00218 
00223   virtual bool GetTransform (iSkeletonBoneFactory *bone,
00224       csReversibleTransform &dst_trans) = 0;
00225 
00229   virtual void SetTransform(iSkeletonBoneFactory *bone, 
00230     csReversibleTransform &transform) = 0;
00231 
00236   virtual bool GetKeyFrameData (iSkeletonBoneFactory *bone_fact, 
00237     csQuaternion & rot, csVector3 & pos, csQuaternion & tangent,
00238     bool & relative) = 0;
00239 };
00240 
00244 struct iSkeletonAnimation : public virtual iBase
00245 {
00246   SCF_INTERFACE (iSkeletonAnimation, 1, 0, 0);
00247 
00251   virtual const char* GetName () const = 0;
00252 
00256   virtual void SetName (const char* name) = 0;
00257 
00261   virtual csTicks GetTime () = 0;
00262 
00266   virtual void SetTime (csTicks time) = 0;
00267 
00271   virtual float GetSpeed () = 0;
00272 
00276   virtual void SetSpeed (float speed) = 0;
00277 
00281   virtual void SetFactor (float factor) = 0;
00282 
00286   virtual float GetFactor () = 0;
00287 
00291   virtual void SetLoop (bool loop) = 0;
00292 
00296   virtual bool GetLoop () = 0;
00297 
00301   virtual iSkeletonAnimationKeyFrame *CreateFrame (const char* name) = 0;
00302 
00306   virtual size_t GetFramesCount () = 0;
00307 
00311   virtual iSkeletonAnimationKeyFrame *GetFrame (size_t i) = 0;
00312 
00316   virtual size_t FindFrameIndex (const char *name) = 0;
00317 
00321   virtual void RemoveFrame (size_t i) = 0;
00322 
00326   virtual void RemoveAllFrames () = 0;
00327 
00333   virtual void RecalcSpline () = 0;
00334 };
00335 
00340 struct iSkeletonAnimationCallback : public virtual iBase
00341 {
00342   SCF_INTERFACE (iSkeletonAnimationCallback, 1, 0, 0);
00343 
00347   virtual void Execute(iSkeletonAnimation *animation, size_t frame_idx) = 0;
00348 
00352   virtual void OnFinish(iSkeletonAnimation *animation) = 0;
00353 };
00354 
00360 struct iSkeletonUpdateCallback : public virtual iBase
00361 {
00362   SCF_INTERFACE (iSkeletonUpdateCallback, 1, 0, 0);
00363 
00367   virtual void Execute(iSkeleton *skeleton, const csTicks & current_ticks) = 0;
00368 };
00369 
00373 struct iSkeletonAnimationInstance : public virtual iBase
00374 {
00375   SCF_INTERFACE (iSkeletonAnimationInstance, 1, 0, 0);
00376 
00380   virtual float GetSpeed () = 0;
00381 
00385   virtual void SetSpeed (float speed) = 0;
00386 
00390   virtual void SetFactor (float factor) = 0;
00391 
00395   virtual float GetFactor () = 0;
00396 
00400   virtual csTicks GetDuration () = 0;
00401 
00405   virtual void SetDuration (csTicks time) = 0;
00406 };
00407 
00422 struct iSkeleton : public virtual iBase
00423 {
00424   SCF_INTERFACE (iSkeleton, 1, 0, 0);
00425 
00429   virtual const char* GetName () const = 0;
00430 
00434   virtual void SetName (const char* name) = 0;
00435 
00439   virtual size_t GetBonesCount () = 0;
00440 
00444   virtual iSkeletonBone *GetBone (size_t i) = 0;
00445 
00449   virtual iSkeletonBone *FindBone (const char *name) = 0;
00450 
00454   virtual size_t FindBoneIndex (const char *name) = 0;
00455 
00459   virtual iSkeletonAnimation* Execute (const char *animation_name, float blend_factor = 0.0f) = 0;
00460 
00466   virtual iSkeletonAnimation* Append (const char *animation_name) = 0;
00467 
00471   virtual iSkeletonAnimationInstance *Play (const char *animation_name) = 0;
00472 
00476   virtual void Stop (iSkeletonAnimationInstance *anim_instance) = 0;
00477 
00481   virtual void ClearPendingAnimations () = 0;
00482 
00486   virtual size_t GetAnimationsCount () = 0;
00487 
00491   virtual iSkeletonAnimation* GetAnimation (size_t i) = 0;
00492 
00496   virtual iSkeletonAnimation* FindAnimation (const char *animation_name) = 0;
00497 
00501   virtual iSkeletonSocket* FindSocket (const char *socketname) = 0;
00502 
00506   virtual void StopAll () = 0;
00507 
00511   virtual void Stop (const char* animation_name) = 0;
00512 
00516   virtual iSkeletonFactory *GetFactory () = 0;
00517 
00521   virtual void SetAnimationCallback (iSkeletonAnimationCallback *cb) = 0;
00522 
00523   //virtual void CreateRagdoll(iODEDynamicSystem *dyn_sys, csReversibleTransform & transform) = 0;
00524   //virtual void DestroyRagdoll() = 0;
00525 
00529   virtual size_t AddUpdateCallback (
00530       iSkeletonUpdateCallback *update_callback) = 0;
00531 
00535   virtual size_t GetUpdateCallbacksCount () = 0;
00536 
00540   virtual iSkeletonUpdateCallback *GetUpdateCallback(size_t callback_idx) = 0;
00541 
00545   virtual void RemoveUpdateCallback (size_t callback_idx) = 0;
00546 
00551   virtual bool UpdateAnimation (csTicks current_time) = 0;
00552 
00559   virtual void UpdateBones () = 0;
00560 };
00561 
00568 struct iSkeletonSocket : public virtual iBase
00569 {
00570   SCF_INTERFACE (iSkeletonSocket, 1, 0, 0);
00571 
00575   virtual const char* GetName () const = 0;
00576 
00580   virtual void SetName (const char* name) = 0;
00581 
00585   virtual csReversibleTransform &GetTransform () = 0;
00586 
00590   virtual void SetTransform (const csReversibleTransform &transform) = 0;
00591 
00595   virtual csReversibleTransform &GetFullTransform () = 0;
00596 
00600   virtual void SetBone (iSkeletonBone *bone) = 0;
00601 
00605   virtual iSkeletonBone *GetBone () = 0;
00606 
00610   virtual void SetSceneNode (iSceneNode *node) = 0;
00611 
00615   virtual iSceneNode *GetSceneNode () = 0;
00616 
00620   virtual iSkeletonSocketFactory *GetFactory () = 0;
00621 };
00622 
00623 struct iSkeletonBoneRagdollInfo : public virtual iBase
00624 {
00625   SCF_INTERFACE (iSkeletonBoneRagdollInfo, 1, 0, 0);
00626 
00627   virtual void SetEnabled(bool enabled) = 0;
00628   virtual bool GetEnabled() = 0;
00629   virtual void SetAttachToParent(bool attach) = 0;
00630   virtual bool GetAttachToParent() = 0;
00631 
00632   virtual void SetGeomName(const char *name) = 0;
00633   virtual const char *GetGeomName() = 0;
00634   virtual void SetGeomType(int geom_type) = 0;
00635   virtual int GetGeomType() = 0;
00636   virtual void SetGeomDimensions(csVector3 &size) = 0;
00637   virtual csVector3 &GetGeomDimensions() = 0;
00638 
00639   virtual void SetFriction(float friction) = 0;
00640   virtual float GetFriction() = 0;
00641   virtual void SetElasticity(float elasticity) = 0;
00642   virtual float GetElasticity() = 0;
00643   virtual void SetSoftness(float softness) = 0;
00644   virtual float GetSoftness() = 0;
00645   virtual void SetSlip(float slip) = 0;
00646   virtual float GetSlip() = 0;
00647 
00648   virtual void SetBodyName(const char *name) = 0;
00649   virtual const char *GetBodyName() = 0;
00650   virtual void SetBodyMass(float mass) = 0;
00651   virtual float GetBodyMass() = 0;
00652   virtual void SetBodyGravmode(int gravmode) = 0;
00653   virtual int GetBodyGravmode() = 0;
00654 
00655   virtual void SetJointName(const char *name) = 0;
00656   virtual const char *GetJointName() = 0;
00657   virtual void SetJointMinRotContraints(csVector3 & constraints) = 0;
00658   virtual csVector3 & GetJointMinRotContraints() = 0;
00659   virtual void SetJointMaxRotContraints(csVector3 & constraints) = 0;
00660   virtual csVector3 & GetJointMaxRotContraints() = 0;
00661   virtual void SetJointMinTransContraints(csVector3 & constraints) = 0;
00662   virtual csVector3 & GetJointMinTransContraints() = 0;
00663   virtual void SetJointMaxTransContraints(csVector3 & constraints) = 0;
00664   virtual csVector3 & GetJointMaxTransContraints() = 0;
00665 };
00666 
00671 struct iSkeletonBoneFactory : public virtual iBase
00672 {
00673   SCF_INTERFACE (iSkeletonBoneFactory, 1, 0, 0);
00674 
00678   virtual const char* GetName () const = 0;
00679 
00683   virtual void SetName (const char* name) = 0;
00684 
00688   virtual csReversibleTransform &GetTransform () = 0;
00689 
00693   virtual void SetTransform (const csReversibleTransform &transform) = 0;
00694 
00698   virtual csReversibleTransform &GetFullTransform () = 0;
00699 
00703   virtual  void SetParent (iSkeletonBoneFactory *parent) = 0;
00704 
00708   virtual iSkeletonBoneFactory *GetParent () = 0;
00709 
00713   virtual size_t GetChildrenCount () = 0;
00714 
00718   virtual iSkeletonBoneFactory *GetChild (size_t i) = 0;
00719 
00723   virtual iSkeletonBoneFactory *FindChild (const char *name) = 0;
00724 
00728   virtual size_t FindChildIndex (iSkeletonBoneFactory *child) = 0;
00729 
00733   virtual void SetSkinBox (csBox3 & box) = 0;
00734 
00738   virtual csBox3 & GetSkinBox () = 0;
00739 
00743   virtual iSkeletonBoneRagdollInfo *GetRagdollInfo() = 0;
00744 };
00745 
00750 struct iSkeletonSocketFactory : public virtual iBase
00751 {
00752   SCF_INTERFACE (iSkeletonSocketFactory, 1, 0, 0);
00753 
00757   virtual const char* GetName () const = 0;
00758 
00762   virtual void SetName (const char* name) = 0;
00763 
00767   virtual csReversibleTransform &GetTransform () = 0;
00768 
00772   virtual void SetTransform (const csReversibleTransform &transform) = 0;
00773 
00777   virtual csReversibleTransform &GetFullTransform () = 0;
00778 
00782   virtual void SetBone (iSkeletonBoneFactory *bone) = 0;
00783 
00787   virtual iSkeletonBoneFactory *GetBone () = 0;
00788 };
00789 
00794 struct iSkeletonFactory : public virtual iBase
00795 {
00796   SCF_INTERFACE (iSkeletonFactory, 1, 0, 0);
00797 
00801   virtual const char* GetName () const = 0;
00802 
00806   virtual void SetName (const char* name) = 0;
00807 
00811   virtual iSkeletonBoneFactory *CreateBone (const char *name) = 0;
00812 
00816   virtual iSkeletonAnimation *CreateAnimation (const char *name) = 0;
00817 
00821   virtual iSkeletonAnimation *FindAnimation (const char *name) = 0;
00822 
00826   virtual size_t GetAnimationsCount () = 0;
00827 
00831   virtual iSkeletonAnimation *GetAnimation (size_t idx) = 0;
00832 
00836   virtual iSkeletonBoneFactory *FindBone (const char *name) = 0;
00837 
00841   virtual size_t FindBoneIndex (const char *name) = 0;
00842 
00846   virtual size_t GetBonesCount () const = 0;
00847 
00851   virtual iSkeletonBoneFactory *GetBone(size_t i) = 0;
00852 
00856   virtual iSkeletonGraveyard *GetGraveyard  () = 0;
00857 
00861   virtual iSkeletonSocketFactory *CreateSocket(const char *name,
00862       iSkeletonBoneFactory *bone) = 0;
00863 
00867   virtual iSkeletonSocketFactory *FindSocket(const char *name) = 0;
00868 
00872   virtual iSkeletonSocketFactory *GetSocket (int i) = 0;
00873 
00877   virtual void RemoveSocket (int i) = 0;
00878 
00882   virtual size_t GetSocketsCount() = 0;
00883 };
00884 
00885 
00891 struct iSkeletonGraveyard : public virtual iBase
00892 {
00893   SCF_INTERFACE (iSkeletonGraveyard, 1, 0, 0);
00894 
00898   virtual size_t GetFactoriesCount() = 0;
00899 
00903   virtual iSkeletonFactory *CreateFactory(const char *name) = 0;
00904 
00908   virtual iSkeletonFactory *LoadFactory(const char *file_name) = 0;
00909 
00913   virtual iSkeletonFactory *FindFactory(const char *name) = 0;
00914 
00918   virtual iSkeleton *CreateSkeleton(iSkeletonFactory *fact,
00919       const char *name = 0) = 0;
00920 
00924   virtual void SetManualUpdates (bool man_updates) = 0;
00925 
00929   virtual void Update (csTicks time) = 0;
00930 
00934   virtual void AddSkeleton (iSkeleton *skeleton) = 0;
00935 
00939   virtual void RemoveSkeleton (iSkeleton* skeleton) = 0;
00940 };
00941 
00942 #endif //__CS_ISKELETON_H__

Generated for Crystal Space 2.0 by doxygen 1.7.6.1