Open Source Tomb Raider Engine
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

SkeletalModel.cpp 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*!
  2. * \file src/SkeletalModel.cpp
  3. * \brief This is the factored out skeletal model class
  4. *
  5. * \author Mongoose
  6. * \author xythobuz
  7. */
  8. #include <cstddef>
  9. #include "SkeletalModel.h"
  10. SkeletalModel::SkeletalModel() {
  11. model = NULL;
  12. mBoneFrame = 0;
  13. mAnimationFrame = 0;
  14. mIdleAnimation = 0;
  15. }
  16. SkeletalModel::~SkeletalModel() {
  17. // Model is really stored in World and deleted there
  18. // Deleting it here causes EXEC_BAD_ACCESS...
  19. /* if (model) {
  20. for(std::vector<animation_frame_t>::size_type i = 0; i < model->animation.size(); i++) {
  21. animation_frame_t *af = model->animation[i];
  22. if (!af)
  23. continue;
  24. for(std::vector<bone_frame_t>::size_type j = 0; j < af->frame.size(); j++) {
  25. bone_frame_t *bf = af->frame[j];
  26. if (!bf)
  27. continue;
  28. for(std::vector<bone_tag_t>::size_type k = 0; k < bf->tag.size(); k++) {
  29. if (bf->tag[i])
  30. delete bf->tag[i];
  31. }
  32. delete bf;
  33. }
  34. delete af;
  35. }
  36. delete model;
  37. } */
  38. }
  39. int SkeletalModel::getAnimation() {
  40. return mAnimationFrame;
  41. }
  42. int SkeletalModel::getFrame() {
  43. return mBoneFrame;
  44. }
  45. int SkeletalModel::getIdleAnimation() {
  46. return mIdleAnimation;
  47. }
  48. void SkeletalModel::setModel(skeletal_model_t *mdl) {
  49. if (mdl)
  50. model = mdl;
  51. }
  52. void SkeletalModel::setAnimation(int index) {
  53. if (!model) // index > (int)model->animation.size())
  54. return;
  55. animation_frame_t *a = model->animation[index];
  56. if (a) {
  57. mAnimationFrame = index;
  58. mBoneFrame = 0;
  59. }
  60. }
  61. void SkeletalModel::setFrame(int index) {
  62. if (!model)
  63. return;
  64. animation_frame_t *a = model->animation[mAnimationFrame];
  65. if (a) { // index > (int)a->frame.size())
  66. bone_frame_t *b = a->frame[index];
  67. if (b)
  68. mBoneFrame = index;
  69. }
  70. }
  71. void SkeletalModel::setIdleAnimation(int index) {
  72. if (!model)
  73. return;
  74. if (model->animation[index])
  75. mIdleAnimation = index;
  76. }