MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / CopyRaw

Function CopyRaw

modules/tools/animation_tool/src/animation_builder.cc:90–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88// Also fixes up the front (t = 0) and back keys (t = duration).
89template <typename _SrcTrack, typename _DestTrack>
90void 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
128template <typename _SortingKey>
129void CopyToAnimation(ozz::vector<_SortingKey>* _src,

Callers 1

operator()Method · 0.85

Calls 4

sizeMethod · 0.45
frontMethod · 0.45
push_backMethod · 0.45
backMethod · 0.45

Tested by

no test coverage detected