Open Source Tomb Raider Engine
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

SkeletalModel.h 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*!
  2. * \file include/SkeletalModel.h
  3. * \brief This is the factored out skeletal model class
  4. *
  5. * \author Mongoose
  6. * \author xythobuz
  7. */
  8. #ifndef _SKELETALMODEL_H_
  9. #define _SKELETALMODEL_H_
  10. #include <vector>
  11. #include "TombRaider.h"
  12. class BoneTag {
  13. public:
  14. BoneTag(int m, float o[3], float r[3], char f);
  15. BoneTag(TombRaider& tr, unsigned int index, unsigned int j, unsigned int* l,
  16. unsigned int frame_offset);
  17. void display();
  18. void getOffset(float o[3]);
  19. void getRotation(float r[3]);
  20. char getFlag();
  21. private:
  22. int mesh;
  23. float off[3];
  24. float rot[3];
  25. char flag;
  26. };
  27. class BoneFrame {
  28. public:
  29. BoneFrame(float p[3]);
  30. BoneFrame(TombRaider& tr, unsigned int index, unsigned int frame_offset);
  31. ~BoneFrame();
  32. void getPosition(float p[3]);
  33. unsigned long size();
  34. BoneTag& get(unsigned long i);
  35. void add(BoneTag* t);
  36. private:
  37. float pos[3];
  38. std::vector<BoneTag*> tag;
  39. };
  40. class AnimationFrame {
  41. public:
  42. AnimationFrame(char r);
  43. AnimationFrame(TombRaider& tr, unsigned int index, int a, unsigned int* frame_offset,
  44. int frame_step);
  45. ~AnimationFrame();
  46. unsigned long size();
  47. BoneFrame& get(unsigned long i);
  48. void add(BoneFrame* f);
  49. private:
  50. char rate;
  51. std::vector<BoneFrame*> frame;
  52. };
  53. class SkeletalModel {
  54. public:
  55. SkeletalModel(int i);
  56. SkeletalModel(TombRaider& tr, unsigned int index, int objectId);
  57. ~SkeletalModel();
  58. void display(unsigned long aframe, unsigned long bframe);
  59. int getId();
  60. void setPigTail(bool b);
  61. void setPonyPos(float x, float y, float z, float angle);
  62. unsigned long size();
  63. AnimationFrame& get(unsigned long i);
  64. void add(AnimationFrame* f);
  65. private:
  66. int id;
  67. bool tr4Overlay;
  68. bool pigtails;
  69. long ponytailId;
  70. float ponytail[3];
  71. long ponytailMeshId;
  72. unsigned int ponytailNumMeshes;
  73. float ponytailAngle;
  74. float ponyOff;
  75. float ponyOff2;
  76. std::vector<AnimationFrame*> animation;
  77. };
  78. #endif