AnimationProcedural.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef _AnimationProcedural_h_
  2. #define _AnimationProcedural_h_
  3. #include "..\..\common_h\core.h"
  4. #include "..\..\common_h\Animation.h"
  5. #include "..\..\common_h\templates\array.h"
  6. #include "..\..\common_h\templates\string.h"
  7. class AnimationScene;
  8. class AnimationProcedural : public IAnimationProcedural
  9. {
  10. struct Name
  11. {
  12. const char * name;
  13. long hash;
  14. };
  15. struct BoneDesc
  16. {
  17. long parent;
  18. Name longName;
  19. Name shortName;
  20. };
  21. public:
  22. AnimationProcedural(AnimationScene & s, const IAnimationScene::Bone * skeleton, dword count, const char * _cppFile, long _cppLine);
  23. ~AnimationProcedural();
  24. public:
  25. //Получить имя анимации
  26. virtual const char * GetName();
  27. public:
  28. //Копировать интерфейс
  29. virtual IAnimationTransform * Clone();
  30. //Удалить интерфейс
  31. virtual void Release();
  32. //Удалить интерфейс принудительно с сообщением об ошибке
  33. void ForceRelease();
  34. public:
  35. //Получить количество костей в анимации
  36. virtual long GetNumBones();
  37. //Получить имя кости
  38. virtual const char * GetBoneName(long index);
  39. //Получить индекс родительской кости
  40. virtual long GetBoneParent(long index);
  41. //Найти по имени кость
  42. virtual long FindBone(const char * boneName, bool shortName);
  43. //Найти по имени кость (короткое имя)
  44. virtual long FindBoneUseHash(const char * boneName, dword hash);
  45. //Получить матрицу кости с учётом иерархии
  46. virtual const Matrix & GetBoneMatrix(long index);
  47. //Получить массив матриц с учётом иерархии
  48. virtual const Matrix * GetBoneMatrices();
  49. //Установить пользовательскую матрицу кости
  50. virtual void SetBoneMatrix(long index, const Matrix & mtx);
  51. //Установить нулевую матрицу кости
  52. virtual void CollapseBone(long index);
  53. private:
  54. Matrix * matrices; //Массив матриц
  55. BoneDesc * bones; //Массив описаний костей
  56. long bonesCount; //Количество костей
  57. long refCounter; //Счётчик ссылок
  58. byte * buffer; //Буфер с данными
  59. AnimationScene & scene; //Сцена, которой принадлежит анимация
  60. const char * cppFile; //Исходный Файл в котором был создан объект
  61. long cppLine; //Строка от куда был создан объект
  62. static dword filesCounter[4]; //Счётчик файлов для генерации уникального имени
  63. };
  64. #endif