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 {
explicit TrackTest();
void constructEmpty();
void constructArray();
void constructArrayDefaults();
void constructInitializerList();
@ -87,7 +88,8 @@ const struct {
}
TrackTest::TrackTest() {
addTests({&TrackTest::constructArray,
addTests({&TrackTest::constructEmpty,
&TrackTest::constructArray,
&TrackTest::constructArrayDefaults,
&TrackTest::constructInitializerList,
&TrackTest::constructInitializerListDefaults,
@ -103,6 +105,15 @@ TrackTest::TrackTest() {
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() {
const Track<Float, Vector3> a{
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 {
explicit TrackViewTest();
void constructEmpty();
void construct();
void constructDefaults();
void constructSingleArray();
@ -87,7 +88,8 @@ const struct {
}
TrackViewTest::TrackViewTest() {
addTests({&TrackViewTest::construct,
addTests({&TrackViewTest::constructEmpty,
&TrackViewTest::construct,
&TrackViewTest::constructDefaults,
&TrackViewTest::constructSingleArray,
&TrackViewTest::constructSingleArrayDefaults,
@ -103,6 +105,15 @@ TrackViewTest::TrackViewTest() {
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() {
constexpr Float keys[]{0.0f, 5.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 */
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
* @param data Keyframe data
@ -259,6 +268,9 @@ Cast to @ref TrackView of correct type to use.
@experimental
*/
class TrackViewStorage {
public:
constexpr /*implicit*/ TrackViewStorage() noexcept: _keys{}, _values{}, _interpolator{}, _before{}, _after{} {}
private:
template<class, class, class> friend class TrackView;
@ -298,6 +310,15 @@ template<class K, class V, class R
/** @brief Interpolation function */
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
* @param keys Frame keys

Loading…
Cancel
Save