1 #ifndef JUGIMAP_TIMELINE_ANIMATION_H
2 #define JUGIMAP_TIMELINE_ANIMATION_H
5 #include "jmAnimationCommon.h"
14 class TimelineAnimation;
16 class AnimationMember;
17 class JugiMapBinaryLoader;
25 friend class AnimationTrack;
26 friend class TimelineAnimation;
27 friend class JugiMapBinaryLoader;
30 AnimationKey(AnimationTrack *_keyAnimation) : animationTrack(_keyAnimation){}
31 AnimationKey(AnimationTrack *_keyAnimation,
int _time) : animationTrack(_keyAnimation), time(_time){}
32 virtual ~AnimationKey(){}
34 virtual void CopyFrom(AnimationKey *_key) = 0;
35 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend) = 0;
37 AnimationTrack * GetAnimationTrack(){
return animationTrack; }
40 int GetTime(){
return time; }
41 Easing &GetEasing(){
return easing; }
45 AnimationTrack *animationTrack =
nullptr;
52 class AKTranslation :
public AnimationKey
56 AKTranslation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
57 AKTranslation(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
59 virtual void CopyFrom(AnimationKey *_key)
override
61 position = static_cast<AKTranslation*>(_key)->position;
64 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
66 AKTranslation *kStart = static_cast<AKTranslation*>(_aniKeyDataStart);
67 AKTranslation *kEnd = static_cast<AKTranslation*>(_aniKeyDataEnd);
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);
78 class AKScaling :
public AnimationKey
82 AKScaling(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
83 AKScaling(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
86 virtual void CopyFrom(AnimationKey *_key)
override
88 scale = static_cast<AKScaling*>(_key)->scale;
89 uniform = static_cast<AKScaling*>(_key)->uniform;
92 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
94 AKScaling *kStart = static_cast<AKScaling*>(_aniKeyDataStart);
95 AKScaling *kEnd = static_cast<AKScaling*>(_aniKeyDataEnd);
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;
108 class AKFlipHide :
public AnimationKey
112 AKFlipHide(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
113 AKFlipHide(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
116 virtual void CopyFrom(AnimationKey *_key)
override
118 flip = static_cast<AKFlipHide*>(_key)->flip;
119 hidden = static_cast<AKFlipHide*>(_key)->hidden;
122 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
124 AKFlipHide *kStart = static_cast<AKFlipHide*>(_aniKeyDataStart);
125 AKFlipHide *kEnd = static_cast<AKFlipHide*>(_aniKeyDataEnd);
128 hidden = kStart->hidden;
137 class AKRotation :
public AnimationKey
141 AKRotation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
142 AKRotation(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
145 virtual void CopyFrom(AnimationKey *_key)
override
147 rotation = static_cast<AKRotation*>(_key)->rotation;
150 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
152 AKRotation *kStart = static_cast<AKRotation*>(_aniKeyDataStart);
153 AKRotation *kEnd = static_cast<AKRotation*>(_aniKeyDataEnd);
155 rotation = kStart->rotation + blend * (kEnd->rotation - kStart->rotation);
159 float rotation = 0.0;
163 class AKAlphaChange :
public AnimationKey
167 AKAlphaChange(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
168 AKAlphaChange(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
171 virtual void CopyFrom(AnimationKey *_key)
override
173 alpha = static_cast<AKAlphaChange*>(_key)->alpha;
176 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
178 AKAlphaChange *kStart = static_cast<AKAlphaChange*>(_aniKeyDataStart);
179 AKAlphaChange *kEnd = static_cast<AKAlphaChange*>(_aniKeyDataEnd);
181 alpha = kStart->alpha + blend * (kEnd->alpha - kStart->alpha);
189 class AKOverlayColorChange :
public AnimationKey
193 AKOverlayColorChange(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
194 AKOverlayColorChange(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
197 virtual void CopyFrom(AnimationKey *_key)
override
199 color = static_cast<AKOverlayColorChange*>(_key)->color;
202 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
204 AKOverlayColorChange *kStart = static_cast<AKOverlayColorChange*>(_aniKeyDataStart);
205 AKOverlayColorChange *kEnd = static_cast<AKOverlayColorChange*>(_aniKeyDataEnd);
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);
218 class AKPathMovement :
public AnimationKey
222 AKPathMovement(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
223 AKPathMovement(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
226 virtual void CopyFrom(AnimationKey *_key)
override
228 relDistance = static_cast<AKPathMovement*>(_key)->relDistance;
231 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
233 AKPathMovement *kStart = static_cast<AKPathMovement*>(_aniKeyDataStart);
234 AKPathMovement *kEnd = static_cast<AKPathMovement*>(_aniKeyDataEnd);
236 relDistance = kStart->relDistance + blend * (kEnd->relDistance - kStart->relDistance);
240 float relDistance = 0.0f;
244 class AKFrameChange :
public AnimationKey
248 AKFrameChange(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
249 AKFrameChange(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
252 virtual void CopyFrom(AnimationKey *_key)
override
254 frameImageIndex = static_cast<AKFrameChange*>(_key)->frameImageIndex;
255 animationFrame = static_cast<AKFrameChange*>(_key)->animationFrame;
258 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
260 AKFrameChange *kStart = static_cast<AKFrameChange*>(_aniKeyDataStart);
262 frameImageIndex = kStart->frameImageIndex;
263 animationFrame = kStart->animationFrame;
267 int frameImageIndex = 0;
268 AnimationFrame animationFrame;
272 class AKFrameAnimation :
public AnimationKey
277 AKFrameAnimation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
278 AKFrameAnimation(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
281 virtual void CopyFrom(AnimationKey *_key)
override
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;
289 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
291 AKFrameAnimation *kStart = static_cast<AKFrameAnimation*>(_aniKeyDataStart);
293 animationName = kStart->animationName;
294 completeLoops = kStart->completeLoops;
295 discardAnimationsQueue = kStart->discardAnimationsQueue;
296 fSpeed = kStart->fSpeed;
301 std::string animationName;
302 bool completeLoops =
true;
303 bool discardAnimationsQueue =
false;
308 class AKTimelineAnimation :
public AnimationKey
312 AKTimelineAnimation(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
313 AKTimelineAnimation(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
316 virtual void CopyFrom(AnimationKey *_key)
override
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;
324 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
326 AKTimelineAnimation *kStart = static_cast<AKTimelineAnimation*>(_aniKeyDataStart);
328 animationName = kStart->animationName;
329 completeLoops = kStart->completeLoops;
330 discardAnimationsQueue = kStart->discardAnimationsQueue;
331 fSpeed = kStart->fSpeed;
336 std::string animationName;
337 bool completeLoops =
true;
338 bool discardAnimationsQueue =
false;
343 class AKMeta :
public AnimationKey
347 AKMeta(AnimationTrack *_keyAnimation) : AnimationKey(_keyAnimation){}
348 AKMeta(AnimationTrack *_keyAnimation,
int _time) : AnimationKey(_keyAnimation, _time){}
352 virtual void CopyFrom(AnimationKey *_key)
override
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;
360 virtual void CopyFrom(AnimationKey *_aniKeyDataStart, AnimationKey *_aniKeyDataEnd,
float blend)
override
362 AKMeta *kStart = static_cast<AKMeta*>(_aniKeyDataStart);
364 label = kStart->label;
365 parameters = kStart->parameters;
366 dataFlags = kStart->dataFlags;
367 paused = kStart->paused;
373 std::vector<Parameter> parameters;
379 AnimationKey * CreateAnimationKey(AnimationTrack *_animationTrack);
381 AnimationKey * CopyAnimationKey(AnimationKey* _srcAnimationKey);
387 class TimelineAnimation;
390 class AnimationTrackParameters
395 std::string pathNameID;
396 bool reverseDirectionOnClosedShape =
false;
397 bool pathDirectionOrientation =
false;
398 float pathRelDistanceOffset = 0.0;
406 friend class TimelineAnimation;
407 friend class JugiMapBinaryLoader;
412 AnimationTrack(
const AnimationTrack &ka);
413 AnimationTrack& operator=(
const AnimationTrack &ka);
417 std::string GetName(){
return name;}
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; }
431 TimelineAnimation * animation =
nullptr;
433 bool disabled =
false;
437 AnimationTrackParameters tp;
438 std::vector<AnimationKey*>animationKeys;
447 class AnimationMember
450 friend class TimelineAnimation;
451 friend class JugiMapBinaryLoader;
455 AnimationMember(
const std::string &_childNameID) : nameID(_childNameID){}
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; }
465 bool DeleteEmptyTracks();
470 std::vector<AnimationTrack*>animationTracks;
471 bool disabled =
false;
489 std::vector<AnimationMember*>& GetAnimationMembers(){
return animationMembers;}
490 AnimationTrack* GetMetaAnimationTrack(){
return metaAnimationTrack; }
492 AnimationMember* GetRootAnimationMember();
493 AnimationMember* GetChildAnimationMember(
const std::string &_childNameID);
507 std::vector<AnimationMember*>animationMembers;
508 AnimationTrack *metaAnimationTrack =
nullptr;