Browse Source

Animation: make it possible to easily create empty track(view)s.

pull/191/head
Vladimír Vondruš 8 years ago
parent
commit
1ec90a2cc1
  1. 13
      src/Magnum/Animation/Test/TrackTest.cpp
  2. 13
      src/Magnum/Animation/Test/TrackViewTest.cpp
  3. 21
      src/Magnum/Animation/Track.h

13
src/Magnum/Animation/Test/TrackTest.cpp

@ -34,6 +34,7 @@ namespace Magnum { namespace Animation { namespace Test {
struct TrackTest: TestSuite::Tester { struct TrackTest: TestSuite::Tester {
explicit TrackTest(); explicit TrackTest();
void constructEmpty();
void constructArray(); void constructArray();
void constructArrayDefaults(); void constructArrayDefaults();
void constructInitializerList(); void constructInitializerList();
@ -87,7 +88,8 @@ const struct {
} }
TrackTest::TrackTest() { TrackTest::TrackTest() {
addTests({&TrackTest::constructArray, addTests({&TrackTest::constructEmpty,
&TrackTest::constructArray,
&TrackTest::constructArrayDefaults, &TrackTest::constructArrayDefaults,
&TrackTest::constructInitializerList, &TrackTest::constructInitializerList,
&TrackTest::constructInitializerListDefaults, &TrackTest::constructInitializerListDefaults,
@ -103,6 +105,15 @@ TrackTest::TrackTest() {
using namespace Math::Literals; using namespace Math::Literals;
void TrackTest::constructEmpty() {
const Track<Float, Vector3> a;
CORRADE_VERIFY(!a.interpolator());
CORRADE_VERIFY(a.keys().empty());
CORRADE_VERIFY(a.values().empty());
CORRADE_COMPARE(a.at(42.0f), Vector3{});
}
void TrackTest::constructArray() { void TrackTest::constructArray() {
const Track<Float, Vector3> a{ const Track<Float, Vector3> a{
Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit, Containers::Array<std::pair<Float, Vector3>>{Containers::InPlaceInit,

13
src/Magnum/Animation/Test/TrackViewTest.cpp

@ -34,6 +34,7 @@ namespace Magnum { namespace Animation { namespace Test {
struct TrackViewTest: TestSuite::Tester { struct TrackViewTest: TestSuite::Tester {
explicit TrackViewTest(); explicit TrackViewTest();
void constructEmpty();
void construct(); void construct();
void constructDefaults(); void constructDefaults();
void constructSingleArray(); void constructSingleArray();
@ -87,7 +88,8 @@ const struct {
} }
TrackViewTest::TrackViewTest() { TrackViewTest::TrackViewTest() {
addTests({&TrackViewTest::construct, addTests({&TrackViewTest::constructEmpty,
&TrackViewTest::construct,
&TrackViewTest::constructDefaults, &TrackViewTest::constructDefaults,
&TrackViewTest::constructSingleArray, &TrackViewTest::constructSingleArray,
&TrackViewTest::constructSingleArrayDefaults, &TrackViewTest::constructSingleArrayDefaults,
@ -103,6 +105,15 @@ TrackViewTest::TrackViewTest() {
using namespace Math::Literals; using namespace Math::Literals;
void TrackViewTest::constructEmpty() {
const TrackView<Float, Vector3> a;
CORRADE_VERIFY(!a.interpolator());
CORRADE_VERIFY(a.keys().empty());
CORRADE_VERIFY(a.values().empty());
CORRADE_COMPARE(a.at(42.0f), Vector3{});
}
void TrackViewTest::construct() { void TrackViewTest::construct() {
constexpr Float keys[]{0.0f, 5.0f}; constexpr Float keys[]{0.0f, 5.0f};
constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}}; constexpr Vector3 values[]{{3.0f, 1.0f, 0.1f}, {0.3f, 0.6f, 1.0f}};

21
src/Magnum/Animation/Track.h

@ -125,6 +125,15 @@ template<class K, class V, class R
/** @brief Interpolation function */ /** @brief Interpolation function */
typedef ResultType(*Interpolator)(const ValueType&, const ValueType&, Float); typedef ResultType(*Interpolator)(const ValueType&, const ValueType&, Float);
/**
* @brief Construct an empty track
*
* The @ref data(), @ref keys(), @ref values() and @ref interpolator()
* functions return @cpp nullptr @ce, @ref at() always returns a
* default-constructed value.
*/
explicit Track() noexcept: _data{}, _interpolator{}, _before{}, _after{} {}
/** /**
* @brief Constructor * @brief Constructor
* @param data Keyframe data * @param data Keyframe data
@ -259,6 +268,9 @@ Cast to @ref TrackView of correct type to use.
@experimental @experimental
*/ */
class TrackViewStorage { class TrackViewStorage {
public:
constexpr /*implicit*/ TrackViewStorage() noexcept: _keys{}, _values{}, _interpolator{}, _before{}, _after{} {}
private: private:
template<class, class, class> friend class TrackView; template<class, class, class> friend class TrackView;
@ -298,6 +310,15 @@ template<class K, class V, class R
/** @brief Interpolation function */ /** @brief Interpolation function */
typedef ResultType(*Interpolator)(const ValueType&, const ValueType&, Float); typedef ResultType(*Interpolator)(const ValueType&, const ValueType&, Float);
/**
* @brief Construct an empty track
*
* The @ref keys(), @ref values() and @ref interpolator() functions
* return @cpp nullptr @ce, @ref at() always returns a
* default-constructed value.
*/
explicit TrackView() noexcept {}
/** /**
* @brief Constructor * @brief Constructor
* @param keys Frame keys * @param keys Frame keys

Loading…
Cancel
Save