AnimationFrame.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include "oxygine-include.h"
  3. #include "math/Rect.h"
  4. #include "core/Texture.h"
  5. #include "core/NativeTexture.h"
  6. namespace oxygine
  7. {
  8. class Diffuse
  9. {
  10. public:
  11. Diffuse(): premultiplied(true) {}
  12. spNativeTexture base;
  13. spNativeTexture alpha;
  14. bool premultiplied;
  15. };
  16. class HitTestData
  17. {
  18. public:
  19. HitTestData(): data(0), w(0), h(0), pitch(0) {}
  20. const unsigned char* data;
  21. short w, h;
  22. unsigned char pitch;
  23. };
  24. class AnimationFrame
  25. {
  26. public:
  27. AnimationFrame() : _srcRect(0, 0, 1, 1), _destRect(0, 0, 1, 1), _resAnim(0), _row(0), _column(0) {}
  28. AnimationFrame(spNativeTexture t);
  29. void init(ResAnim* rs, const Diffuse& df,
  30. const RectF& srcRect, const RectF& destRect, const Vector2& frame_size);
  31. void init2(ResAnim* rs, short column, short row, const Diffuse& df,
  32. const RectF& srcRect, const RectF& destRect, const Vector2& frame_size);
  33. /**ResAnim should be valid!*/
  34. AnimationFrame getClipped(const RectF& rect) const;
  35. AnimationFrame getFlipped(bool vertical, bool horizontal) const;
  36. /**Returns size of frame in pixels*/
  37. const Vector2& getSize() const {return _frameSize;}
  38. float getWidth() const {return _frameSize.x;}
  39. float getHeight() const {return _frameSize.y;}
  40. ResAnim* getResAnim() const {return _resAnim;}
  41. short getColumn() const {return _column;}
  42. short getRow() const {return _row;}
  43. const RectF& getSrcRect() const {return _srcRect;}
  44. const RectF& getDestRect() const {return _destRect;}
  45. const Diffuse& getDiffuse() const {return _diffuse;}
  46. const HitTestData& getHitTestData()const { return _hittest; }
  47. void setSrcRect(const RectF& r) {_srcRect = r;}
  48. void setDestRect(const RectF& r) {_destRect = r;}
  49. void setResAnim(ResAnim* rs) {_resAnim = rs;}
  50. void setDiffuse(const Diffuse& d) { _diffuse = d; }
  51. void setSize(const Vector2& size) {_frameSize = size;}
  52. void setSize(float w, float h) { setSize(Vector2(w, h)); }
  53. void setHitTestData(const HitTestData& ad) { _hittest = ad; }
  54. void setRow(int v) {_row = v;}
  55. void setColumn(int v) {_column = v;}
  56. void flipX();
  57. void flipY();
  58. private:
  59. enum flags
  60. {
  61. clipped = 0x01,
  62. };
  63. Diffuse _diffuse;
  64. RectF _srcRect;
  65. RectF _destRect;
  66. Vector2 _frameSize;//real size without clipping
  67. ResAnim* _resAnim;
  68. short _row;
  69. short _column;
  70. HitTestData _hittest;
  71. //unsigned short _flags;
  72. };
  73. }