/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #ifndef __MOTION_CHANNEL__ #define __MOTION_CHANNEL__ #include "geometry/curve.h" namespace GS { namespace Core { /*! @short Motion channel object. This class extends the curve class holding together a set of key frames and able to evaluate the underlying curve object at a specific position. A channel should be used on a specific value declared by the enumeration Type. @author Emmanuel Julien (ejulien@gsworks.fr) */ struct MotionChannel : public Curve { enum Type { NoType = 0, Undf = 0, // Transformation block. XPos, YPos, ZPos, XRot, YRot, ZRot, XScl, YScl, ZScl, XPiv, YPiv, ZPiv, // RDif, GDif, BDif, RSpc, GSpc, BSpc, DiffuseIntensity, SpecularIntensity, ConeAngle, EdgeAngle, Alpha, ZoomFactor, Range, FogStart, FogEnd, RFog, GFog, BFog, Last }; Type type; /// Return the channel memory footprint. size_t MemoryFootPrint() const { return Curve::MemoryFootPrint() + sizeof(MotionChannel); } bool FromMetaTag(NML::Tag &); NML::Tag *AsMetaTag() const; MotionChannel(); ~MotionChannel(); }; } // Core } // GS #endif // __MOTION_CHANNEL__