JugiMap Framework
jmTimelineAnimation.h
1 #ifndef JUGIMAP_TIMELINE_ANIMATION_H
2 #define JUGIMAP_TIMELINE_ANIMATION_H
3 
4 #include <vector>
5 #include "jmAnimationCommon.h"
6 #include "jmGlobal.h"
7 
8 
9 
10 namespace jugimap{
11 
12 
13 
14 class TimelineAnimation;
15 class AnimationTrack;
16 class AnimationMember;
17 class JugiMapBinaryLoader;
18 
19 
20 
21 class AnimationKey
22 {
23 public:
24 
25  friend class AnimationTrack;
26  friend class TimelineAnimation;
27  friend class JugiMapBinaryLoader;
28 
29 
30  AnimationKey(AnimationTrack *_keyAnimation) : animationTrack(_keyAnimation){}
31  AnimationKey(AnimationTrack *_keyAnimation, int _time) : animationTrack(_keyAnimation), time(_time){}
32  virtual ~AnimationKey(){}
33 
34  virtual void CopyFrom(AnimationKey *_key) = 0;
35  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) = 0;
36 
37  AnimationTrack * GetAnimationTrack(){ return animationTrack; }
38  AnimationTrackKind GetKind();
39 
40  int GetTime(){ return time; }
41  Easing &GetEasing(){ return easing; }
42 
43 
44 private:
45  AnimationTrack *animationTrack = nullptr; // LINK
46  int time = 0;
47  Easing easing;
48 
49 };
50 
51 
52 class AKTranslation : public AnimationKey
53 {
54 public:
55 
56  AKTranslation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
57  AKTranslation(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
58 
59  virtual void CopyFrom(AnimationKey *_key) override
60  {
61  position = static_cast<AKTranslation*>(_key)->position;
62  }
63 
64  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
65  {
66  AKTranslation *kStart = static_cast<AKTranslation*>(_aniKeyDataStart);
67  AKTranslation *kEnd = static_cast<AKTranslation*>(_aniKeyDataEnd);
68 
69  position.x = kStart->position.x + blend * (kEnd->position.x - kStart->position.x);
70  position.y = kStart->position.y + blend * (kEnd->position.y - kStart->position.y);
71  }
72 
73 
74  Vec2f position;
75 };
76 
77 
78 class AKScaling : public AnimationKey
79 {
80 public:
81 
82  AKScaling(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
83  AKScaling(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
84 
85 
86  virtual void CopyFrom(AnimationKey *_key) override
87  {
88  scale = static_cast<AKScaling*>(_key)->scale;
89  uniform = static_cast<AKScaling*>(_key)->uniform;
90  }
91 
92  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
93  {
94  AKScaling *kStart = static_cast<AKScaling*>(_aniKeyDataStart);
95  AKScaling *kEnd = static_cast<AKScaling*>(_aniKeyDataEnd);
96 
97  scale.x = kStart->scale.x + blend * (kEnd->scale.x - kStart->scale.x);
98  scale.y = kStart->scale.y + blend * (kEnd->scale.y - kStart->scale.y);
99  uniform = kStart->uniform;
100  }
101 
102 
103  Vec2f scale = Vec2f(1.0f, 1.0f);
104  bool uniform = true;
105 };
106 
107 
108 class AKFlipHide : public AnimationKey
109 {
110 public:
111 
112  AKFlipHide(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
113  AKFlipHide(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
114 
115 
116  virtual void CopyFrom(AnimationKey *_key) override
117  {
118  flip = static_cast<AKFlipHide*>(_key)->flip;
119  hidden = static_cast<AKFlipHide*>(_key)->hidden;
120  }
121 
122  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
123  {
124  AKFlipHide *kStart = static_cast<AKFlipHide*>(_aniKeyDataStart);
125  AKFlipHide *kEnd = static_cast<AKFlipHide*>(_aniKeyDataEnd);
126 
127  flip = kStart->flip;
128  hidden = kStart->hidden;
129  }
130 
131 
132  Vec2i flip;
133  bool hidden = false;
134 };
135 
136 
137 class AKRotation : public AnimationKey
138 {
139 public:
140 
141  AKRotation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
142  AKRotation(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
143 
144 
145  virtual void CopyFrom(AnimationKey *_key) override
146  {
147  rotation = static_cast<AKRotation*>(_key)->rotation;
148  }
149 
150  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
151  {
152  AKRotation *kStart = static_cast<AKRotation*>(_aniKeyDataStart);
153  AKRotation *kEnd = static_cast<AKRotation*>(_aniKeyDataEnd);
154 
155  rotation = kStart->rotation + blend * (kEnd->rotation - kStart->rotation);
156  }
157 
158 
159  float rotation = 0.0;
160 };
161 
162 
163 class AKAlphaChange : public AnimationKey
164 {
165 public:
166 
167  AKAlphaChange(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
168  AKAlphaChange(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
169 
170 
171  virtual void CopyFrom(AnimationKey *_key) override
172  {
173  alpha = static_cast<AKAlphaChange*>(_key)->alpha;
174  }
175 
176  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
177  {
178  AKAlphaChange *kStart = static_cast<AKAlphaChange*>(_aniKeyDataStart);
179  AKAlphaChange *kEnd = static_cast<AKAlphaChange*>(_aniKeyDataEnd);
180 
181  alpha = kStart->alpha + blend * (kEnd->alpha - kStart->alpha);
182  }
183 
184 
185  float alpha = 1.0;
186 };
187 
188 
189 class AKOverlayColorChange : public AnimationKey
190 {
191 public:
192 
193  AKOverlayColorChange(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
194  AKOverlayColorChange(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
195 
196 
197  virtual void CopyFrom(AnimationKey *_key) override
198  {
199  color = static_cast<AKOverlayColorChange*>(_key)->color;
200  }
201 
202  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
203  {
204  AKOverlayColorChange *kStart = static_cast<AKOverlayColorChange*>(_aniKeyDataStart);
205  AKOverlayColorChange *kEnd = static_cast<AKOverlayColorChange*>(_aniKeyDataEnd);
206 
207  color.r = kStart->color.r + blend * (kEnd->color.r - kStart->color.r);
208  color.g = kStart->color.g + blend * (kEnd->color.g - kStart->color.g);
209  color.b = kStart->color.b + blend * (kEnd->color.b - kStart->color.b);
210  color.a = kStart->color.a + blend * (kEnd->color.a - kStart->color.a);
211  }
212 
213 
214  ColorRGBA color;
215 };
216 
217 
218 class AKPathMovement : public AnimationKey
219 {
220 public:
221 
222  AKPathMovement(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
223  AKPathMovement(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
224 
225 
226  virtual void CopyFrom(AnimationKey *_key) override
227  {
228  relDistance = static_cast<AKPathMovement*>(_key)->relDistance;
229  }
230 
231  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
232  {
233  AKPathMovement *kStart = static_cast<AKPathMovement*>(_aniKeyDataStart);
234  AKPathMovement *kEnd = static_cast<AKPathMovement*>(_aniKeyDataEnd);
235 
236  relDistance = kStart->relDistance + blend * (kEnd->relDistance - kStart->relDistance);
237  }
238 
239 
240  float relDistance = 0.0f;
241 };
242 
243 
244 class AKFrameChange : public AnimationKey
245 {
246 public:
247 
248  AKFrameChange(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
249  AKFrameChange(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
250 
251 
252  virtual void CopyFrom(AnimationKey *_key) override
253  {
254  frameImageIndex = static_cast<AKFrameChange*>(_key)->frameImageIndex;
255  animationFrame = static_cast<AKFrameChange*>(_key)->animationFrame;
256  }
257 
258  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
259  {
260  AKFrameChange *kStart = static_cast<AKFrameChange*>(_aniKeyDataStart);
261 
262  frameImageIndex = kStart->frameImageIndex;
263  animationFrame = kStart->animationFrame;
264  }
265 
266 
267  int frameImageIndex = 0;
268  AnimationFrame animationFrame;
269 };
270 
271 
272 class AKFrameAnimation : public AnimationKey
273 {
274 public:
275 
276 
277  AKFrameAnimation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
278  AKFrameAnimation(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
279 
280 
281  virtual void CopyFrom(AnimationKey *_key) override
282  {
283  animationName = static_cast<AKFrameAnimation*>(_key)->animationName;
284  completeLoops = static_cast<AKFrameAnimation*>(_key)->completeLoops;
285  discardAnimationsQueue = static_cast<AKFrameAnimation*>(_key)->discardAnimationsQueue;
286  fSpeed = static_cast<AKFrameAnimation*>(_key)->fSpeed;
287  }
288 
289  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
290  {
291  AKFrameAnimation *kStart = static_cast<AKFrameAnimation*>(_aniKeyDataStart);
292 
293  animationName = kStart->animationName;
294  completeLoops = kStart->completeLoops;
295  discardAnimationsQueue = kStart->discardAnimationsQueue;
296  fSpeed = kStart->fSpeed;
297 
298  }
299 
300 
301  std::string animationName;
302  bool completeLoops = true;
303  bool discardAnimationsQueue = false;
304  float fSpeed = 1.0;
305 };
306 
307 
308 class AKTimelineAnimation : public AnimationKey
309 {
310 public:
311 
312  AKTimelineAnimation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
313  AKTimelineAnimation(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
314 
315 
316  virtual void CopyFrom(AnimationKey *_key) override
317  {
318  animationName = static_cast<AKTimelineAnimation*>(_key)->animationName;
319  completeLoops = static_cast<AKTimelineAnimation*>(_key)->completeLoops;
320  discardAnimationsQueue = static_cast<AKTimelineAnimation*>(_key)->discardAnimationsQueue;
321  fSpeed = static_cast<AKTimelineAnimation*>(_key)->fSpeed;
322  }
323 
324  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
325  {
326  AKTimelineAnimation *kStart = static_cast<AKTimelineAnimation*>(_aniKeyDataStart);
327 
328  animationName = kStart->animationName;
329  completeLoops = kStart->completeLoops;
330  discardAnimationsQueue = kStart->discardAnimationsQueue;
331  fSpeed = kStart->fSpeed;
332 
333  }
334 
335 
336  std::string animationName;
337  bool completeLoops = true;
338  bool discardAnimationsQueue = false;
339  float fSpeed = 1.0;
340 };
341 
342 
343 class AKMeta : public AnimationKey
344 {
345 public:
346 
347  AKMeta(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
348  AKMeta(AnimationTrack *_keyAnimation, int _time) : AnimationKey(_keyAnimation, _time){}
349 
350 
351 
352  virtual void CopyFrom(AnimationKey *_key) override
353  {
354  label = static_cast<AKMeta*>(_key)->label;
355  parameters = static_cast<AKMeta*>(_key)->parameters;
356  dataFlags = static_cast<AKMeta*>(_key)->dataFlags;
357  paused = static_cast<AKMeta*>(_key)->paused;
358  }
359 
360  virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd, float blend) override
361  {
362  AKMeta *kStart = static_cast<AKMeta*>(_aniKeyDataStart);
363 
364  label = kStart->label;
365  parameters = kStart->parameters;
366  dataFlags = kStart->dataFlags;
367  paused = kStart->paused;
368  }
369 
370 
371  std::string label;
372  std::string label2;
373  std::vector<Parameter> parameters;
374  int dataFlags = 0;
375  bool paused = false;
376 };
377 
378 
379 AnimationKey * CreateAnimationKey(AnimationTrack *_animationTrack);
380 
381 AnimationKey * CopyAnimationKey(AnimationKey* _srcAnimationKey);
382 
383 
384 //=====================================================================================================================
385 
386 
387 class TimelineAnimation;
388 
389 
390 class AnimationTrackParameters
391 {
392 public:
393 
395  std::string pathNameID;
396  bool reverseDirectionOnClosedShape = false;
397  bool pathDirectionOrientation = false;
398  float pathRelDistanceOffset = 0.0;
399 };
400 
401 
402 
403 class AnimationTrack
404 {
405 public:
406  friend class TimelineAnimation;
407  friend class JugiMapBinaryLoader;
408 
409 
410  //--- constructors
411  AnimationTrack(){}
412  AnimationTrack(const AnimationTrack &ka);
413  AnimationTrack& operator=(const AnimationTrack &ka);
414  ~AnimationTrack();
415 
416 
417  std::string GetName(){return name;}
418  AnimationTrackKind GetKind(){return kind;}
419 
420 
421  bool IsDisabled(){ return disabled; }
422  void SetDisabled(bool _disabled){ disabled = _disabled; }
423  TimelineAnimation* GetAnimation(){ return animation; }
424  std::vector<AnimationKey*> &GetAnimationKeys(){return animationKeys;}
425  AnimationTrackParameters &GetTrackParameters(){ return tp; }
426 
427 
428 
429 private:
430  AnimationTrackKind kind;
431  TimelineAnimation * animation = nullptr; // LINK
432  //---
433  bool disabled = false;
434  std::string name;
435 
436  //---
437  AnimationTrackParameters tp;
438  std::vector<AnimationKey*>animationKeys; // OWNED
439 
440 
441 };
442 
443 
444 //=====================================================================================================================
445 
446 
447 class AnimationMember
448 {
449 public:
450  friend class TimelineAnimation;
451  friend class JugiMapBinaryLoader;
452 
453 
454  AnimationMember(){}
455  AnimationMember(const std::string &_childNameID) : nameID(_childNameID){}
456  ~AnimationMember();
457 
458 
459  std::string GetNameID(){ return nameID; }
460  std::vector<AnimationTrack*>& GetAnimationTracks(){ return animationTracks;}
461  bool IsDisabled(){ return disabled; }
462  void SetDisabled(bool _disabled){ disabled = _disabled; }
463 
464  AnimationTrack* FindAnimationTrack(AnimationTrackKind _kind);
465  bool DeleteEmptyTracks();
466 
467 
468 private:
469  std::string nameID;
470  std::vector<AnimationTrack*>animationTracks;
471  bool disabled = false;
472 };
473 
474 
475 //=====================================================================================================================
476 
477 
478 
482 {
483 public:
484  friend class JugiMapBinaryLoader;
485  friend class SourceSprite;
486 
487 
488  //---
489  std::vector<AnimationMember*>& GetAnimationMembers(){return animationMembers;}
490  AnimationTrack* GetMetaAnimationTrack(){ return metaAnimationTrack; }
491 
492  AnimationMember* GetRootAnimationMember();
493  AnimationMember* GetChildAnimationMember(const std::string &_childNameID);
494 
495 
496 protected:
497 
498  //----
499  TimelineAnimation(SourceSprite *_sourceObject);
500  TimelineAnimation(const std::string &_nameID, SourceSprite *_sourceObject);
501  TimelineAnimation(const TimelineAnimation &taSrc);
502  TimelineAnimation& operator=(const TimelineAnimation &mkaSrc);
503  ~TimelineAnimation() override;
504 
505 
506 private:
507  std::vector<AnimationMember*>animationMembers; // OWNED
508  AnimationTrack *metaAnimationTrack = nullptr; // OWNED
509 
510 
511 
512 
513 };
514 
515 
516 }
517 
518 
519 
520 
521 #endif
jugimap::TimelineAnimation
The TimelineAnimation class represents the sprite timeline animation from JugiMap Editor.
Definition: jmTimelineAnimation.h:481
jugimap::Vec2i
Vec2< int > Vec2i
Vec2 struct in integer precision.
Definition: jmCommon.h:166
jugimap::ColorOverlayBlend::NORMAL
Normal mode.
jugimap::AnimationTrackKind
AnimationTrackKind
The kinds of animation track. Used as identifier for AnimationTrack and AnimationKey classes.
Definition: jmGlobal.h:157
jugimap::Animation
The base animation class.
Definition: jmAnimationCommon.h:95
jugimap::Vec2f
Vec2< float > Vec2f
Vec2 struct in float precision.
Definition: jmCommon.h:167
jugimap::SourceSprite
The SourceSprite class defines the source sprite from JugiMap Editor.
Definition: jmSourceGraphics.h:221
jugimap::JugiMapBinaryLoader
The JugiMapBinaryLoader class loads data from jugimap binary files (.jmb).
Definition: jmMapBinaryLoader.h:37
jugimap::ColorOverlayBlend
ColorOverlayBlend
The blend modes for the shader based pixel blending which simulate photoshop blending modes.
Definition: jmGlobal.h:112