// // VROAnimationGroup.h // ViroRenderer // // Created by Raj Advani on 12/28/16. // Copyright © 2016 Viro Media. All rights reserved. // #ifndef VROAnimationGroup_h #define VROAnimationGroup_h #include #include #include #include "VROPropertyAnimation.h" #include "VROMaterialAnimation.h" #include "VROTimingFunction.h" #include "VROExecutableAnimation.h" class VRONode; class VROLazyMaterial; /* An animation group is a set of property and material animations that execute simultaneously. */ class VROAnimationGroup : public VROExecutableAnimation, public std::enable_shared_from_this { public: static std::shared_ptr parse(float duration, float delay, std::string functionName, std::map &properties, std::vector> materials); VROAnimationGroup(float durationSeconds, float delaySeconds, VROTimingFunctionType timingFunction, std::map> &propertyAnimations, std::vector> &materialAnimations) : _duration(durationSeconds), _delay(delaySeconds), _timingFunctionType(timingFunction), _propertyAnimations(propertyAnimations), _materialAnimations(materialAnimations) {} virtual ~VROAnimationGroup() {} std::shared_ptr copy(); void execute(std::shared_ptr node, std::function onFinished); void pause(); void resume(); void terminate(bool jumpToEnd); std::string toString() const; private: static VROTimingFunctionType parseTimingFunction(std::string &name); float _duration; float _delay; VROTimingFunctionType _timingFunctionType; std::shared_ptr _transaction; void animatePosition(std::shared_ptr &node); void animateScale(std::shared_ptr &node); void animateColor(std::shared_ptr &node); void animateOpacity(std::shared_ptr &node); void animateRotation(std::shared_ptr &node); void animateMaterial(std::shared_ptr &node); std::map> _propertyAnimations; std::vector> _materialAnimations; }; #endif /* VROAnimationGroup_h */