Browse Source

Trade: change animation track target to target type and target ID to target.

This is in line with how the other APIs are named (for example
ObjectDataXD have instance type and instance). This would be very hard
to change later without breaking backwards compatibility, so I'm doing
it now, until the animation APIs get widely used.
inverted-ranges
Vladimír Vondruš 8 years ago
parent
commit
e43d5790f6
  1. 4
      doc/snippets/MagnumTrade.cpp
  2. 24
      src/Magnum/Trade/AnimationData.cpp
  3. 80
      src/Magnum/Trade/AnimationData.h
  4. 64
      src/Magnum/Trade/Test/AnimationDataTest.cpp
  5. 2
      src/Magnum/Trade/Trade.h

4
doc/snippets/MagnumTrade.cpp

@ -152,10 +152,10 @@ Containers::Optional<Trade::AnimationData> data = importer->animation(id);
Animation::Player<Float> player; Animation::Player<Float> player;
Containers::Array<Vector3> positions; /* Translations for all objects */ Containers::Array<Vector3> positions; /* Translations for all objects */
for(UnsignedInt i = 0; i != data->trackCount(); ++i) { for(UnsignedInt i = 0; i != data->trackCount(); ++i) {
if(data->trackTarget(i) == Trade::AnimationTrackTarget::Translation3D) { if(data->trackTargetType(i) == Trade::AnimationTrackTargetType::Translation3D) {
CORRADE_INTERNAL_ASSERT(data->trackType(i) == CORRADE_INTERNAL_ASSERT(data->trackType(i) ==
Trade::AnimationTrackType::Vector3); Trade::AnimationTrackType::Vector3);
player.add(data->track<Vector3>(i), positions[data->trackTargetId(i)]); player.add(data->track<Vector3>(i), positions[data->trackTarget(i)]);
} }
// similarly for rotation / scaling ... // similarly for rotation / scaling ...

24
src/Magnum/Trade/AnimationData.cpp

@ -60,14 +60,14 @@ AnimationTrackType AnimationData::trackResultType(UnsignedInt id) const {
return _tracks[id]._resultType; return _tracks[id]._resultType;
} }
AnimationTrackTarget AnimationData::trackTarget(UnsignedInt id) const { AnimationTrackTargetType AnimationData::trackTargetType(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTarget(): index out of range", {}); CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTargetType(): index out of range", {});
return _tracks[id]._target; return _tracks[id]._targetType;
} }
UnsignedInt AnimationData::trackTargetId(UnsignedInt id) const { UnsignedInt AnimationData::trackTarget(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTargetId(): index out of range", {}); CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTarget(): index out of range", {});
return _tracks[id]._targetId; return _tracks[id]._target;
} }
const Animation::TrackViewStorage<Float>& AnimationData::track(UnsignedInt id) const { const Animation::TrackViewStorage<Float>& AnimationData::track(UnsignedInt id) const {
@ -140,13 +140,13 @@ Debug& operator<<(Debug& debug, const AnimationTrackType value) {
return debug << "Trade::AnimationTrackType(" << Debug::nospace << reinterpret_cast<void*>(UnsignedByte(value)) << Debug::nospace << ")"; return debug << "Trade::AnimationTrackType(" << Debug::nospace << reinterpret_cast<void*>(UnsignedByte(value)) << Debug::nospace << ")";
} }
Debug& operator<<(Debug& debug, const AnimationTrackTarget value) { Debug& operator<<(Debug& debug, const AnimationTrackTargetType value) {
if(UnsignedByte(value) >= UnsignedByte(AnimationTrackTarget::Custom)) if(UnsignedByte(value) >= UnsignedByte(AnimationTrackTargetType::Custom))
return debug << "Trade::AnimationTrackTarget::Custom(" << Debug::nospace << UnsignedByte(value) << Debug::nospace << ")"; return debug << "Trade::AnimationTrackTargetType::Custom(" << Debug::nospace << UnsignedByte(value) << Debug::nospace << ")";
switch(value) { switch(value) {
/* LCOV_EXCL_START */ /* LCOV_EXCL_START */
#define _c(value) case AnimationTrackTarget::value: return debug << "Trade::AnimationTrackTarget::" #value; #define _c(value) case AnimationTrackTargetType::value: return debug << "Trade::AnimationTrackTargetType::" #value;
_c(Translation2D) _c(Translation2D)
_c(Translation3D) _c(Translation3D)
_c(Rotation2D) _c(Rotation2D)
@ -157,10 +157,10 @@ Debug& operator<<(Debug& debug, const AnimationTrackTarget value) {
/* LCOV_EXCL_STOP */ /* LCOV_EXCL_STOP */
/* To silence compiler warning about unhandled values */ /* To silence compiler warning about unhandled values */
case AnimationTrackTarget::Custom: CORRADE_ASSERT_UNREACHABLE(); /* LCOV_EXCL_LINE */ case AnimationTrackTargetType::Custom: CORRADE_ASSERT_UNREACHABLE(); /* LCOV_EXCL_LINE */
} }
return debug << "Trade::AnimationTrackTarget(" << Debug::nospace << reinterpret_cast<void*>(UnsignedByte(value)) << Debug::nospace << ")"; return debug << "Trade::AnimationTrackTargetType(" << Debug::nospace << reinterpret_cast<void*>(UnsignedByte(value)) << Debug::nospace << ")";
} }
#endif #endif

80
src/Magnum/Trade/AnimationData.h

@ -26,7 +26,7 @@
*/ */
/** @file /** @file
* @brief Class @ref Magnum::Trade::AnimationTrackData, @ref Magnum::Trade::AnimationData, enum @ref Magnum::Trade::AnimationTrackType, @ref Magnum::Trade::AnimationTrackTarget, function @ref Magnum::Trade::animationInterpolatorFor() * @brief Class @ref Magnum::Trade::AnimationTrackData, @ref Magnum::Trade::AnimationData, enum @ref Magnum::Trade::AnimationTrackType, @ref Magnum::Trade::AnimationTrackTargetType, function @ref Magnum::Trade::animationInterpolatorFor()
*/ */
#include "Magnum/Magnum.h" #include "Magnum/Magnum.h"
@ -54,8 +54,8 @@ enum class AnimationTrackType: UnsignedByte {
/** /**
* @ref Magnum::Vector2 "Vector2". Usually used for * @ref Magnum::Vector2 "Vector2". Usually used for
* @ref AnimationTrackTarget::Translation2D and * @ref AnimationTrackTargetType::Translation2D and
* @ref AnimationTrackTarget::Scaling2D. * @ref AnimationTrackTargetType::Scaling2D.
*/ */
Vector2, Vector2,
@ -77,13 +77,13 @@ enum class AnimationTrackType: UnsignedByte {
/** /**
* @ref Magnum::Complex "Complex". Usually used for * @ref Magnum::Complex "Complex". Usually used for
* @ref AnimationTrackTarget::Rotation2D. * @ref AnimationTrackTargetType::Rotation2D.
*/ */
Complex, Complex,
/** /**
* @ref Magnum::Quaternion "Quaternion". Usually used for * @ref Magnum::Quaternion "Quaternion". Usually used for
* @ref AnimationTrackTarget::Rotation3D. * @ref AnimationTrackTargetType::Rotation3D.
*/ */
Quaternion, Quaternion,
@ -92,27 +92,27 @@ enum class AnimationTrackType: UnsignedByte {
/** /**
* @ref Magnum::CubicHermite2D "CubicHermite2D". Usually used for * @ref Magnum::CubicHermite2D "CubicHermite2D". Usually used for
* spline-interpolated @ref AnimationTrackTarget::Translation2D and * spline-interpolated @ref AnimationTrackTargetType::Translation2D and
* @ref AnimationTrackTarget::Scaling2D. * @ref AnimationTrackTargetType::Scaling2D.
*/ */
CubicHermite2D, CubicHermite2D,
/** /**
* @ref Magnum::CubicHermite3D "CubicHermite3D". Usually used for * @ref Magnum::CubicHermite3D "CubicHermite3D". Usually used for
* spline-interpolated @ref AnimationTrackTarget::Translation3D and * spline-interpolated @ref AnimationTrackTargetType::Translation3D and
* @ref AnimationTrackTarget::Scaling3D. * @ref AnimationTrackTargetType::Scaling3D.
*/ */
CubicHermite3D, CubicHermite3D,
/** /**
* @ref Magnum::CubicHermiteComplex "CubicHermiteComplex". Usually used for * @ref Magnum::CubicHermiteComplex "CubicHermiteComplex". Usually used for
* spline-interpolated @ref AnimationTrackTarget::Rotation2D. * spline-interpolated @ref AnimationTrackTargetType::Rotation2D.
*/ */
CubicHermiteComplex, CubicHermiteComplex,
/** /**
* @ref Magnum::CubicHermiteQuaternion "CubicHermiteQuaternion". Usually * @ref Magnum::CubicHermiteQuaternion "CubicHermiteQuaternion". Usually
* used for spline-interpolated @ref AnimationTrackTarget::Rotation3D. * used for spline-interpolated @ref AnimationTrackTargetType::Rotation3D.
*/ */
CubicHermiteQuaternion CubicHermiteQuaternion
}; };
@ -126,7 +126,7 @@ MAGNUM_TRADE_EXPORT Debug& operator<<(Debug& debug, AnimationTrackType value);
@see @ref AnimationData @see @ref AnimationData
@experimental @experimental
*/ */
enum class AnimationTrackTarget: UnsignedByte { enum class AnimationTrackTargetType: UnsignedByte {
/** /**
* Modifies 2D object translation. Type is usually * Modifies 2D object translation. Type is usually
* @ref Magnum::Vector2 "Vector2" or * @ref Magnum::Vector2 "Vector2" or
@ -201,15 +201,15 @@ enum class AnimationTrackTarget: UnsignedByte {
/** /**
* This and all higher values are for importer-specific targets. Can be of * This and all higher values are for importer-specific targets. Can be of
* any type, @ref AnimationData::trackTargetId() might or might not point * any type, @ref AnimationData::trackTarget() might or might not point to
* to an existing object. See documentation of particular importer for * an existing object. See documentation of particular importer for
* details. * details.
*/ */
Custom = 128 Custom = 128
}; };
/** @debugoperatorenum{AnimationTrackTarget} */ /** @debugoperatorenum{AnimationTrackTargetType} */
MAGNUM_TRADE_EXPORT Debug& operator<<(Debug& debug, AnimationTrackTarget value); MAGNUM_TRADE_EXPORT Debug& operator<<(Debug& debug, AnimationTrackTargetType value);
/** /**
@brief Animation track data @brief Animation track data
@ -227,31 +227,31 @@ class AnimationTrackData {
* initialization of @ref AnimationData structure, expected to be * initialization of @ref AnimationData structure, expected to be
* replaced with concrete values later. * replaced with concrete values later.
*/ */
/*implicit*/ AnimationTrackData() noexcept: _type{}, _resultType{}, _target{}, _targetId{}, _view{} {} /*implicit*/ AnimationTrackData() noexcept: _type{}, _resultType{}, _targetType{}, _target{}, _view{} {}
/** /**
* @brief Constructor * @brief Constructor
* @param type Value type * @param type Value type
* @param resultType Result type * @param resultType Result type
* @param targetType Track target type
* @param target Track target * @param target Track target
* @param targetId Track target ID
* @param view Type-erased @ref Animation::TrackView instance * @param view Type-erased @ref Animation::TrackView instance
*/ */
/*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackType resultType, AnimationTrackTarget target, UnsignedInt targetId, Animation::TrackViewStorage<Float> view) noexcept: _type{type}, _resultType{resultType}, _target{target}, _targetId{targetId}, _view{view} {} /*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackType resultType, AnimationTrackTargetType targetType, UnsignedInt target, Animation::TrackViewStorage<Float> view) noexcept: _type{type}, _resultType{resultType}, _targetType{targetType}, _target{target}, _view{view} {}
/** @overload /** @overload
* *
* Equivalent to the above with @p type used as both value type and * Equivalent to the above with @p type used as both value type and
* result type. * result type.
*/ */
/*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackTarget target, UnsignedInt targetId, Animation::TrackViewStorage<Float> view) noexcept: _type{type}, _resultType{type}, _target{target}, _targetId{targetId}, _view{view} {} /*implicit*/ AnimationTrackData(AnimationTrackType type, AnimationTrackTargetType targetType, UnsignedInt target, Animation::TrackViewStorage<Float> view) noexcept: _type{type}, _resultType{type}, _targetType{targetType}, _target{target}, _view{view} {}
private: private:
friend AnimationData; friend AnimationData;
AnimationTrackType _type, _resultType; AnimationTrackType _type, _resultType;
AnimationTrackTarget _target; AnimationTrackTargetType _targetType;
UnsignedInt _targetId; UnsignedInt _target;
Animation::TrackViewStorage<Float> _view; Animation::TrackViewStorage<Float> _view;
}; };
@ -357,8 +357,9 @@ class MAGNUM_TRADE_EXPORT AnimationData {
* @brief Track value type * @brief Track value type
* @param id Track index * @param id Track index
* *
* Data types are usually closely related to @ref trackTarget(), see * Data types are usually closely related to @ref trackTargetType(),
* @ref AnimationTrackTarget documentation for more information. * see @ref AnimationTrackTargetType documentation for more
* information.
* @see @ref trackCount() * @see @ref trackCount()
*/ */
AnimationTrackType trackType(UnsignedInt id) const; AnimationTrackType trackType(UnsignedInt id) const;
@ -369,38 +370,39 @@ class MAGNUM_TRADE_EXPORT AnimationData {
* *
* In case track values are packed, track result type is different from * In case track values are packed, track result type is different from
* @ref trackType(). Data types are usually closely related to * @ref trackType(). Data types are usually closely related to
* @ref trackTarget(), see @ref AnimationTrackTarget documentation for * @ref trackTargetType(), see @ref AnimationTrackTargetType
* more information. * documentation for more information.
* @see @ref trackCount() * @see @ref trackCount()
*/ */
AnimationTrackType trackResultType(UnsignedInt id) const; AnimationTrackType trackResultType(UnsignedInt id) const;
/** /**
* @brief Track target * @brief Track target type
* @param id Track index * @param id Track index
* *
* Particular animation targets usually correspond to a common * Particular animation targets usually correspond to a common
* @ref trackType(), see @ref AnimationTrackTarget documentation for * @ref trackType(), see @ref AnimationTrackTargetType documentation
* more information. * for more information.
* @see @ref trackCount() * @see @ref trackCount()
*/ */
AnimationTrackTarget trackTarget(UnsignedInt id) const; AnimationTrackTargetType trackTargetType(UnsignedInt id) const;
/** /**
* @brief Track target index * @brief Track target
* @param id Track index * @param id Track index
* *
* For @ref trackTarget() with @ref AnimationTrackTarget::Translation2D, * For @ref trackTargetType() with
* @ref AnimationTrackTarget::Translation3D, * @ref AnimationTrackTargetType::Translation2D,
* @ref AnimationTrackTarget::Rotation2D, * @ref AnimationTrackTargetType::Translation3D,
* @ref AnimationTrackTarget::Rotation3D, * @ref AnimationTrackTargetType::Rotation2D,
* @ref AnimationTrackTarget::Scaling2D, * @ref AnimationTrackTargetType::Rotation3D,
* @ref AnimationTrackTarget::Scaling3D specifies object which property * @ref AnimationTrackTargetType::Scaling2D,
* is modified. * @ref AnimationTrackTargetType::Scaling3D specifies object which
* property is modified.
* @see @ref trackCount(), @ref AbstractImporter::object2D(), * @see @ref trackCount(), @ref AbstractImporter::object2D(),
* @ref AbstractImporter::object3D() * @ref AbstractImporter::object3D()
*/ */
UnsignedInt trackTargetId(UnsignedInt id) const; UnsignedInt trackTarget(UnsignedInt id) const;
/** /**
* @brief Track data storage * @brief Track data storage

64
src/Magnum/Trade/Test/AnimationDataTest.cpp

@ -49,7 +49,7 @@ struct AnimationDataTest: TestSuite::Tester {
void trackWrongResultType(); void trackWrongResultType();
void debugAnimationTrackType(); void debugAnimationTrackType();
void debugAnimationTrackTarget(); void debugAnimationTrackTargetType();
}; };
AnimationDataTest::AnimationDataTest() { AnimationDataTest::AnimationDataTest() {
@ -68,7 +68,7 @@ AnimationDataTest::AnimationDataTest() {
&AnimationDataTest::trackWrongResultType, &AnimationDataTest::trackWrongResultType,
&AnimationDataTest::debugAnimationTrackType, &AnimationDataTest::debugAnimationTrackType,
&AnimationDataTest::debugAnimationTrackTarget}); &AnimationDataTest::debugAnimationTrackTargetType});
} }
using namespace Math::Literals; using namespace Math::Literals;
@ -90,14 +90,14 @@ void AnimationDataTest::construct() {
const int state = 5; const int state = 5;
AnimationData data{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, { AnimationData data{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, {
{AnimationTrackType::Vector3, {AnimationTrackType::Vector3,
AnimationTrackTarget::Translation3D, 42, AnimationTrackTargetType::Translation3D, 42,
Animation::TrackView<Float, Vector3>{ Animation::TrackView<Float, Vector3>{
{&view[0].time, view.size(), sizeof(Data)}, {&view[0].time, view.size(), sizeof(Data)},
{&view[0].position, view.size(), sizeof(Data)}, {&view[0].position, view.size(), sizeof(Data)},
Animation::Interpolation::Constant, Animation::Interpolation::Constant,
animationInterpolatorFor<Vector3>(Animation::Interpolation::Constant)}}, animationInterpolatorFor<Vector3>(Animation::Interpolation::Constant)}},
{AnimationTrackType::Quaternion, {AnimationTrackType::Quaternion,
AnimationTrackTarget::Rotation3D, 1337, AnimationTrackTargetType::Rotation3D, 1337,
Animation::TrackView<Float, Quaternion>{ Animation::TrackView<Float, Quaternion>{
{&view[0].time, view.size(), sizeof(Data)}, {&view[0].time, view.size(), sizeof(Data)},
{&view[0].rotation, view.size(), sizeof(Data)}, {&view[0].rotation, view.size(), sizeof(Data)},
@ -113,8 +113,8 @@ void AnimationDataTest::construct() {
{ {
CORRADE_COMPARE(data.trackType(0), AnimationTrackType::Vector3); CORRADE_COMPARE(data.trackType(0), AnimationTrackType::Vector3);
CORRADE_COMPARE(data.trackResultType(0), AnimationTrackType::Vector3); CORRADE_COMPARE(data.trackResultType(0), AnimationTrackType::Vector3);
CORRADE_COMPARE(data.trackTarget(0), AnimationTrackTarget::Translation3D); CORRADE_COMPARE(data.trackTargetType(0), AnimationTrackTargetType::Translation3D);
CORRADE_COMPARE(data.trackTargetId(0), 42); CORRADE_COMPARE(data.trackTarget(0), 42);
Animation::TrackView<Float, Vector3> track = data.track<Vector3>(0); Animation::TrackView<Float, Vector3> track = data.track<Vector3>(0);
CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.keys().size(), 3);
@ -124,8 +124,8 @@ void AnimationDataTest::construct() {
} { } {
CORRADE_COMPARE(data.trackType(1), AnimationTrackType::Quaternion); CORRADE_COMPARE(data.trackType(1), AnimationTrackType::Quaternion);
CORRADE_COMPARE(data.trackResultType(1), AnimationTrackType::Quaternion); CORRADE_COMPARE(data.trackResultType(1), AnimationTrackType::Quaternion);
CORRADE_COMPARE(data.trackTarget(1), AnimationTrackTarget::Rotation3D); CORRADE_COMPARE(data.trackTargetType(1), AnimationTrackTargetType::Rotation3D);
CORRADE_COMPARE(data.trackTargetId(1), 1337); CORRADE_COMPARE(data.trackTarget(1), 1337);
Animation::TrackView<Float, Quaternion> track = data.track<Quaternion>(1); Animation::TrackView<Float, Quaternion> track = data.track<Quaternion>(1);
CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.keys().size(), 3);
@ -152,13 +152,13 @@ void AnimationDataTest::constructImplicitDuration() {
const int state = 5; const int state = 5;
AnimationData data{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, { AnimationData data{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, {
{AnimationTrackType::Bool, {AnimationTrackType::Bool,
AnimationTrackTarget(129), 0, AnimationTrackTargetType(129), 0,
Animation::TrackView<Float, bool>{ Animation::TrackView<Float, bool>{
{&view[0].time, 2, sizeof(Data)}, {&view[0].time, 2, sizeof(Data)},
{&view[0].value, 2, sizeof(Data)}, {&view[0].value, 2, sizeof(Data)},
Animation::Interpolation::Constant}}, Animation::Interpolation::Constant}},
{AnimationTrackType::Bool, {AnimationTrackType::Bool,
AnimationTrackTarget(130), 1, AnimationTrackTargetType(130), 1,
Animation::TrackView<Float, bool>{ Animation::TrackView<Float, bool>{
{&view[2].time, 2, sizeof(Data)}, {&view[2].time, 2, sizeof(Data)},
{&view[2].value, 2, sizeof(Data)}, {&view[2].value, 2, sizeof(Data)},
@ -171,8 +171,8 @@ void AnimationDataTest::constructImplicitDuration() {
{ {
CORRADE_COMPARE(data.trackType(0), AnimationTrackType::Bool); CORRADE_COMPARE(data.trackType(0), AnimationTrackType::Bool);
CORRADE_COMPARE(data.trackResultType(0), AnimationTrackType::Bool); CORRADE_COMPARE(data.trackResultType(0), AnimationTrackType::Bool);
CORRADE_COMPARE(data.trackTarget(0), AnimationTrackTarget(129)); CORRADE_COMPARE(data.trackTargetType(0), AnimationTrackTargetType(129));
CORRADE_COMPARE(data.trackTargetId(0), 0); CORRADE_COMPARE(data.trackTarget(0), 0);
Animation::TrackView<Float, bool> track = data.track<bool>(0); Animation::TrackView<Float, bool> track = data.track<bool>(0);
CORRADE_COMPARE(track.duration(), (Range1D{1.0f, 5.0f})); CORRADE_COMPARE(track.duration(), (Range1D{1.0f, 5.0f}));
@ -183,8 +183,8 @@ void AnimationDataTest::constructImplicitDuration() {
} { } {
CORRADE_COMPARE(data.trackType(1), AnimationTrackType::Bool); CORRADE_COMPARE(data.trackType(1), AnimationTrackType::Bool);
CORRADE_COMPARE(data.trackResultType(1), AnimationTrackType::Bool); CORRADE_COMPARE(data.trackResultType(1), AnimationTrackType::Bool);
CORRADE_COMPARE(data.trackTarget(1), AnimationTrackTarget(130)); CORRADE_COMPARE(data.trackTargetType(1), AnimationTrackTargetType(130));
CORRADE_COMPARE(data.trackTargetId(1), 1); CORRADE_COMPARE(data.trackTarget(1), 1);
Animation::TrackView<Float, bool> track = data.track<bool>(1); Animation::TrackView<Float, bool> track = data.track<bool>(1);
CORRADE_COMPARE(track.duration(), (Range1D{3.0f, 7.0f})); CORRADE_COMPARE(track.duration(), (Range1D{3.0f, 7.0f}));
@ -221,14 +221,14 @@ void AnimationDataTest::constructMove() {
const int state = 5; const int state = 5;
AnimationData a{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, { AnimationData a{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, {
{AnimationTrackType::Vector3, {AnimationTrackType::Vector3,
AnimationTrackTarget::Translation3D, 42, AnimationTrackTargetType::Translation3D, 42,
Animation::TrackView<Float, Vector3>{ Animation::TrackView<Float, Vector3>{
{&view[0].time, view.size(), sizeof(Data)}, {&view[0].time, view.size(), sizeof(Data)},
{&view[0].position, view.size(), sizeof(Data)}, {&view[0].position, view.size(), sizeof(Data)},
Animation::Interpolation::Constant, Animation::Interpolation::Constant,
animationInterpolatorFor<Vector3>(Animation::Interpolation::Constant)}}, animationInterpolatorFor<Vector3>(Animation::Interpolation::Constant)}},
{AnimationTrackType::Quaternion, {AnimationTrackType::Quaternion,
AnimationTrackTarget::Rotation3D, 1337, AnimationTrackTargetType::Rotation3D, 1337,
Animation::TrackView<Float, Quaternion>{ Animation::TrackView<Float, Quaternion>{
{&view[0].time, view.size(), sizeof(Data)}, {&view[0].time, view.size(), sizeof(Data)},
{&view[0].rotation, view.size(), sizeof(Data)}, {&view[0].rotation, view.size(), sizeof(Data)},
@ -246,8 +246,8 @@ void AnimationDataTest::constructMove() {
{ {
CORRADE_COMPARE(b.trackType(0), AnimationTrackType::Vector3); CORRADE_COMPARE(b.trackType(0), AnimationTrackType::Vector3);
CORRADE_COMPARE(b.trackResultType(0), AnimationTrackType::Vector3); CORRADE_COMPARE(b.trackResultType(0), AnimationTrackType::Vector3);
CORRADE_COMPARE(b.trackTarget(0), AnimationTrackTarget::Translation3D); CORRADE_COMPARE(b.trackTargetType(0), AnimationTrackTargetType::Translation3D);
CORRADE_COMPARE(b.trackTargetId(0), 42); CORRADE_COMPARE(b.trackTarget(0), 42);
Animation::TrackView<Float, Vector3> track = b.track<Vector3>(0); Animation::TrackView<Float, Vector3> track = b.track<Vector3>(0);
CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.keys().size(), 3);
@ -257,8 +257,8 @@ void AnimationDataTest::constructMove() {
} { } {
CORRADE_COMPARE(b.trackType(1), AnimationTrackType::Quaternion); CORRADE_COMPARE(b.trackType(1), AnimationTrackType::Quaternion);
CORRADE_COMPARE(b.trackResultType(1), AnimationTrackType::Quaternion); CORRADE_COMPARE(b.trackResultType(1), AnimationTrackType::Quaternion);
CORRADE_COMPARE(b.trackTarget(1), AnimationTrackTarget::Rotation3D); CORRADE_COMPARE(b.trackTargetType(1), AnimationTrackTargetType::Rotation3D);
CORRADE_COMPARE(b.trackTargetId(1), 1337); CORRADE_COMPARE(b.trackTarget(1), 1337);
Animation::TrackView<Float, Quaternion> track = b.track<Quaternion>(1); Animation::TrackView<Float, Quaternion> track = b.track<Quaternion>(1);
CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.keys().size(), 3);
@ -279,8 +279,8 @@ void AnimationDataTest::constructMove() {
{ {
CORRADE_COMPARE(c.trackType(0), AnimationTrackType::Vector3); CORRADE_COMPARE(c.trackType(0), AnimationTrackType::Vector3);
CORRADE_COMPARE(c.trackResultType(0), AnimationTrackType::Vector3); CORRADE_COMPARE(c.trackResultType(0), AnimationTrackType::Vector3);
CORRADE_COMPARE(c.trackTarget(0), AnimationTrackTarget::Translation3D); CORRADE_COMPARE(c.trackTargetType(0), AnimationTrackTargetType::Translation3D);
CORRADE_COMPARE(c.trackTargetId(0), 42); CORRADE_COMPARE(c.trackTarget(0), 42);
Animation::TrackView<Float, Vector3> track = c.track<Vector3>(0); Animation::TrackView<Float, Vector3> track = c.track<Vector3>(0);
CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.keys().size(), 3);
@ -290,8 +290,8 @@ void AnimationDataTest::constructMove() {
} { } {
CORRADE_COMPARE(c.trackType(1), AnimationTrackType::Quaternion); CORRADE_COMPARE(c.trackType(1), AnimationTrackType::Quaternion);
CORRADE_COMPARE(c.trackResultType(1), AnimationTrackType::Quaternion); CORRADE_COMPARE(c.trackResultType(1), AnimationTrackType::Quaternion);
CORRADE_COMPARE(c.trackTarget(1), AnimationTrackTarget::Rotation3D); CORRADE_COMPARE(c.trackTargetType(1), AnimationTrackTargetType::Rotation3D);
CORRADE_COMPARE(c.trackTargetId(1), 1337); CORRADE_COMPARE(c.trackTarget(1), 1337);
Animation::TrackView<Float, Quaternion> track = c.track<Quaternion>(1); Animation::TrackView<Float, Quaternion> track = c.track<Quaternion>(1);
CORRADE_COMPARE(track.keys().size(), 3); CORRADE_COMPARE(track.keys().size(), 3);
@ -321,7 +321,7 @@ void AnimationDataTest::trackCustomResultType() {
AnimationData data{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, { AnimationData data{std::move(buffer), Containers::Array<AnimationTrackData>{Containers::InPlaceInit, {
{AnimationTrackType::Vector3i, {AnimationTrackType::Vector3i,
AnimationTrackType::Vector3, AnimationTrackType::Vector3,
AnimationTrackTarget::Scaling3D, 0, AnimationTrackTargetType::Scaling3D, 0,
Animation::TrackView<Float, Vector3i, Vector3>{ Animation::TrackView<Float, Vector3i, Vector3>{
{&view[0].time, view.size(), sizeof(Data)}, {&view[0].time, view.size(), sizeof(Data)},
{&view[0].position, view.size(), sizeof(Data)}, {&view[0].position, view.size(), sizeof(Data)},
@ -340,15 +340,15 @@ void AnimationDataTest::trackWrongIndex() {
AnimationData data{nullptr, nullptr}; AnimationData data{nullptr, nullptr};
data.trackType(0); data.trackType(0);
data.trackResultType(0); data.trackResultType(0);
data.trackTargetType(0);
data.trackTarget(0); data.trackTarget(0);
data.trackTargetId(0);
data.track(0); data.track(0);
CORRADE_COMPARE(out.str(), CORRADE_COMPARE(out.str(),
"Trade::AnimationData::trackType(): index out of range\n" "Trade::AnimationData::trackType(): index out of range\n"
"Trade::AnimationData::trackResultType(): index out of range\n" "Trade::AnimationData::trackResultType(): index out of range\n"
"Trade::AnimationData::trackTargetType(): index out of range\n"
"Trade::AnimationData::trackTarget(): index out of range\n" "Trade::AnimationData::trackTarget(): index out of range\n"
"Trade::AnimationData::trackTargetId(): index out of range\n"
"Trade::AnimationData::track(): index out of range\n"); "Trade::AnimationData::track(): index out of range\n");
} }
@ -359,7 +359,7 @@ void AnimationDataTest::trackWrongType() {
AnimationData data{nullptr, Containers::Array<AnimationTrackData>{Containers::InPlaceInit, { AnimationData data{nullptr, Containers::Array<AnimationTrackData>{Containers::InPlaceInit, {
{AnimationTrackType::Vector3i, {AnimationTrackType::Vector3i,
AnimationTrackType::Vector3, AnimationTrackType::Vector3,
AnimationTrackTarget::Scaling3D, 0, {}} AnimationTrackTargetType::Scaling3D, 0, {}}
}}}; }}};
data.track<Vector3>(0); data.track<Vector3>(0);
@ -374,7 +374,7 @@ void AnimationDataTest::trackWrongResultType() {
AnimationData data{nullptr, Containers::Array<AnimationTrackData>{Containers::InPlaceInit, { AnimationData data{nullptr, Containers::Array<AnimationTrackData>{Containers::InPlaceInit, {
{AnimationTrackType::Vector3i, {AnimationTrackType::Vector3i,
AnimationTrackType::Vector3, AnimationTrackType::Vector3,
AnimationTrackTarget::Scaling3D, 0, {}} AnimationTrackTargetType::Scaling3D, 0, {}}
}}}; }}};
data.track<Vector3i, Vector2>(0); data.track<Vector3i, Vector2>(0);
@ -389,11 +389,11 @@ void AnimationDataTest::debugAnimationTrackType() {
CORRADE_COMPARE(out.str(), "Trade::AnimationTrackType::DualQuaternion Trade::AnimationTrackType(0xde)\n"); CORRADE_COMPARE(out.str(), "Trade::AnimationTrackType::DualQuaternion Trade::AnimationTrackType(0xde)\n");
} }
void AnimationDataTest::debugAnimationTrackTarget() { void AnimationDataTest::debugAnimationTrackTargetType() {
std::ostringstream out; std::ostringstream out;
Debug{&out} << AnimationTrackTarget::Rotation3D << AnimationTrackTarget(135) << AnimationTrackTarget(0x42); Debug{&out} << AnimationTrackTargetType::Rotation3D << AnimationTrackTargetType(135) << AnimationTrackTargetType(0x42);
CORRADE_COMPARE(out.str(), "Trade::AnimationTrackTarget::Rotation3D Trade::AnimationTrackTarget::Custom(135) Trade::AnimationTrackTarget(0x42)\n"); CORRADE_COMPARE(out.str(), "Trade::AnimationTrackTargetType::Rotation3D Trade::AnimationTrackTargetType::Custom(135) Trade::AnimationTrackTargetType(0x42)\n");
} }
}}} }}}

2
src/Magnum/Trade/Trade.h

@ -43,7 +43,7 @@ enum class MaterialType: UnsignedByte;
enum class MaterialAlphaMode: UnsignedByte; enum class MaterialAlphaMode: UnsignedByte;
class AbstractMaterialData; class AbstractMaterialData;
enum class AnimationTrackTarget: UnsignedByte; enum class AnimationTrackTargetType: UnsignedByte;
enum class AnimationTrackType: UnsignedByte; enum class AnimationTrackType: UnsignedByte;
class AnimationTrackData; class AnimationTrackData;
class AnimationData; class AnimationData;

Loading…
Cancel
Save