| 88 | // Also fixes up the front (t = 0) and back keys (t = duration). |
| 89 | template <typename _SrcTrack, typename _DestTrack> |
| 90 | void CopyRaw(const _SrcTrack& _src, uint16_t _track, float _duration, |
| 91 | _DestTrack* _dest) { |
| 92 | typedef typename _SrcTrack::value_type SrcKey; |
| 93 | typedef typename _DestTrack::value_type DestKey; |
| 94 | |
| 95 | if (_src.size() == 0) { // Adds 2 new keys. |
| 96 | PushBackIdentityKey<SrcKey, _DestTrack>(_track, 0.f, _dest); |
| 97 | PushBackIdentityKey<SrcKey, _DestTrack>(_track, _duration, _dest); |
| 98 | } else if (_src.size() == 1) { // Adds 1 new key. |
| 99 | const SrcKey& raw_key = _src.front(); |
| 100 | SKR_ASSERT(raw_key.time >= 0 && raw_key.time <= _duration); |
| 101 | const DestKey first = {_track, -1.f, {0.f, raw_key.value}}; |
| 102 | _dest->push_back(first); |
| 103 | const DestKey last = {_track, 0.f, {_duration, raw_key.value}}; |
| 104 | _dest->push_back(last); |
| 105 | } else { // Copies all keys, and fixes up first and last keys. |
| 106 | float prev_time = -1.f; |
| 107 | if (_src.front().time != 0.f) { // Needs a key at t = 0.f. |
| 108 | const DestKey first = {_track, prev_time, {0.f, _src.front().value}}; |
| 109 | _dest->push_back(first); |
| 110 | prev_time = 0.f; |
| 111 | } |
| 112 | for (size_t k = 0; k < _src.size(); ++k) { // Copies all keys. |
| 113 | const SrcKey& raw_key = _src[k]; |
| 114 | SKR_ASSERT(raw_key.time >= 0 && raw_key.time <= _duration); |
| 115 | const DestKey key = {_track, prev_time, {raw_key.time, raw_key.value}}; |
| 116 | _dest->push_back(key); |
| 117 | prev_time = raw_key.time; |
| 118 | } |
| 119 | if (_src.back().time - _duration != 0.f) { // Needs a key at t = _duration. |
| 120 | const DestKey last = {_track, prev_time, {_duration, _src.back().value}}; |
| 121 | _dest->push_back(last); |
| 122 | } |
| 123 | } |
| 124 | SKR_ASSERT(_dest->front().key.time == 0.f && |
| 125 | _dest->back().key.time - _duration == 0.f); |
| 126 | } |
| 127 | |
| 128 | template <typename _SortingKey> |
| 129 | void CopyToAnimation(ozz::vector<_SortingKey>* _src, |
no test coverage detected