// // ToySpriteAnimator.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 01.06.2017. // // #ifndef ToySpriteAnimator_h #define ToySpriteAnimator_h #include "json/document.h" #include "cocos2d.h" #include class ToySpriteAnimator : public cocos2d::Ref { public: // tags for RepeatForever animations static const int RF_ANIMATION_TAG_BASE = 10; static const int RF_ANIMATION_TAG_BOUNCE_ANIMATION = 1; static const int RF_ANIMATION_TAG_FLOAT_ANIMATION = 2; static const int RF_ANIMATION_TAG_WIND_TUG_ANIMATION = 3; static const int RF_ANIMATION_TAG_FRAME_ANIMATION = 4; static const int RF_ANIMATION_TAG_JUMP_ANIMATION = 5; static const int RF_ANIMATION_TAG_SCALE_UP_DOWN_ANIMATION = 6; static const int RF_ANIMATION_TAG_ROTATE_FOREVER_ANIMATION = 7; static const int RF_ANIMATION_TAG_TRAIN_RUN_FOREVER_ANIMATION = 8; static const int RF_ANIMATION_TAG_RANGE_MIN = 11; static const int RF_ANIMATION_TAG_RANGE_MAX = 17; static void runAnimationForName(std::string animationName, std::vector sprites, const rapidjson::Value* params); // standard animations // only supported for one sprite static void frameAnimation(cocos2d::Node* sprite, std::vector imageFileArray, std::string folder = ""); // only supported for sprites static void clipToAnimation(std::vector sprites, std::vector durations, std::vector textureRects); static void fadeInAnimation(std::vector sprites); static void fadeOutAnimation(std::vector sprites); static void moveToAnimation(std::vector sprites, float duration, std::vector newPositions, std::string easeOption = ""); static void moveByAnimation(std::vector sprites, float duration, cocos2d::Vec2 deltaPosition, std::string easeOption = ""); static void rotateByAnimation(std::vector sprites, float duration, float rotationAngle, std::string easeOption = ""); static void bezierByAnimation(std::vector sprites, std::vector> bezierPathsDeltaXs, std::vector> bezierPathsDeltaYs, std::vector durations); static void simpleRotateAnimation(std::vector sprites, std::vector delays, std::vector animationAnchorPoints, std::vector rotationAngles, std::vector rotationDurations, std::vector repeatTimes); // fancy animations static void trainRunForeverAnimation(std::vector sprites, float lapDuration); static void crazyRotateAnimation(std::vector sprites); static void fullRotateAnimation(std::vector sprites, bool crazy, std::vector durations); static void rotateForeverAnimation(std::vector sprites, std::vector oneLapDurations); static void scaleUpDownAnimation(std::vector sprites, float upperScale = 1.1, float scaleUpDownDuration = 0.4, int times = 0); static void jumpAnimation(std::vector sprites, std::vector durations, std::vector deltas, std::vector heights); static void jumpAnimation(std::vector sprites, std::vector durations, std::vector deltas, std::vector heights, std::vector jumps); static void floatAnimation(std::vector sprites, std::vector delays, std::vector> dxRanges, std::vector> dyRanges, float totalBezierTime = 2.4); static void windTugAnimation(std::vector sprites, std::vector skewAnglesX, std::vector skewAnglesY); static void windTugAnimationWithRotation(std::vector sprites, std::vector skewAnglesX, std::vector skewAnglesY, std::vector delays = std::vector()); static void bounceAnimation(std::vector sprites, std::vector delays = std::vector(), std::vector rotationDurations = std::vector(), std::vector rotationAngles = std::vector(),std::vector wholeDurations = std::vector(), bool roundUp = false); static void swipeAnimation(std::vector sprites, float delayConst = 0.05, cocos2d::Point animationAnchorPoint = cocos2d::Point(0.5, 1), int rotationDir = 1, cocos2d::Vec2 moveDir = cocos2d::Vec2(-1,-1)); static void sinusoidalMoveAnimation(std::vector sprites, float duration, std::vector moveDestinations, std::vector amplitudes, std::string easeOption = ""); // rf actions handling static std::string mapTagToRFAction(int tag); static void restoreRFAction(cocos2d::Node* sprite, int actionTag); static void cleanUpAnimationData(cocos2d::Node* node); class FloatAnimationData : public cocos2d::Ref { public: float delay; std::vector dxRange; std::vector dyRange; float bezierTime; }; class BounceAnimationData: public cocos2d::Ref { public: float delay; float rotationAngle; float rotationDuration; float wholeDuration; bool roundUp; }; class AnimationUserData : public cocos2d::Ref { public: FloatAnimationData* floatAnimationData; BounceAnimationData* bounceAnimationData; AnimationUserData(){ floatAnimationData = NULL; bounceAnimationData = NULL; } ~AnimationUserData(){ if(floatAnimationData){ delete floatAnimationData; } if(bounceAnimationData){ delete bounceAnimationData; } } //can add mapping tag->animationdata }; protected: static cocos2d::Action* actionWithEaseOption(cocos2d::ActionInterval* action, std::string easeOption = ""); static void singleSpriteFloatAnimation(cocos2d::Node* sprite, float delay, std::vector dxRange, std::vector dyRange, float totalBezierTime = 2.4); }; #endif /* ToySpriteAnimator_h */