diff --git a/Source/Ember/EmberMotion.h b/Source/Ember/EmberMotion.h new file mode 100644 index 0000000..eb101b6 --- /dev/null +++ b/Source/Ember/EmberMotion.h @@ -0,0 +1,151 @@ +#pragma once + +#include "EmberDefines.h" + +namespace EmberNs +{ +/// +/// Thin derivation of pair for the element type +/// of EmberMotion::m_MotionParams to allow for copying vectors +/// of different types of T. +/// Template argument expected to be float or double. +/// +template +class EMBER_API MotionParam : public pair +{ +public: + /// + /// Default constructor, which calls the base, which sets first and second to their defaults. + /// + MotionParam() + { + } + + /// + /// Member-wise constructor. + /// + /// The eEmberMotionParam value to assign to first + /// The T value to assign to second + MotionParam(eEmberMotionParam e, T t) + : pair(e, t) + { + } + + /// + /// Default copy constructor. + /// + /// The MotionParam object to copy + MotionParam(const MotionParam& other) + { + operator=(other); + } + + /// + /// Copy constructor to copy a MotionParam object of type U. + /// + /// The MotionParam object to copy + template + MotionParam(const MotionParam& other) + { + operator=(other); + } + + /// + /// Default assignment operator. + /// + /// The MotionParam object to copy + MotionParam& operator = (const MotionParam& other) + { + if (this != &other) + MotionParam::operator=(other); + + return *this; + } + + /// + /// Assignment operator to assign a MotionParam object of type U. + /// + /// The MotionParam object to copy. + /// Reference to updated self + template + MotionParam &operator = (const MotionParam& other) + { + first = other.first; + second = T(other.second); + + return *this; + } +}; + +/// +/// EmberMotion elements allow for motion of the flame parameters such as zoom, yaw, pitch and friends +/// The values in these elements can be used to modify flame parameters during rotation in much the same +/// way as motion elements on xforms do. +/// Template argument expected to be float or double. +/// +template +class EMBER_API EmberMotion +{ +public: + /// + /// Default constructor to initialize motion freq and offset to 0 and the motion func to SIN. + /// + EmberMotion() + { + m_MotionFreq = 0; + m_MotionFunc = MOTION_SIN; + m_MotionOffset = 0; + } + + /// + /// Default copy constructor. + /// + /// The EmberMotion object to copy + EmberMotion(const EmberMotion& other) + { + operator=(other); + } + + /// + /// Copy constructor to copy a EmberMotion object of type U. + /// + /// The EmberMotion object to copy + template + EmberMotion(const EmberMotion& other) + { + operator=(other); + } + + /// + /// Default assignment operator. + /// + /// The EmberMotion object to copy + EmberMotion& operator = (const EmberMotion& other) + { + if (this != &other) + EmberMotion::operator=(other); + + return *this; + } + + /// + /// Assignment operator to assign a EmberMotion object of type U. + /// + /// The EmberMotion object to copy. + /// Reference to updated self + template + EmberMotion &operator = (const EmberMotion& other) + { + CopyVec(m_MotionParams, other.m_MotionParams); + m_MotionFunc = other.m_MotionFunc; + m_MotionFreq = T(other.m_MotionFreq); + m_MotionOffset = T(other.m_MotionOffset); + return *this; + } + + T m_MotionFreq; + T m_MotionOffset; + eMotion m_MotionFunc; + vector> m_MotionParams; +}; +}