3template<size_t maxMorphs>
4MorphTransform<maxMorphs>::MorphTransform(IEasyEaseAnimator* eEA){
8template<size_t maxMorphs>
9void MorphTransform<maxMorphs>::AddMorph(uint16_t dictionaryValue, Vector3D positionOffset){
10 AddMorph(dictionaryValue, positionOffset, Vector3D(1.0f, 1.0f, 1.0f), Vector3D());
13template<size_t maxMorphs>
14void MorphTransform<maxMorphs>::AddMorph(uint16_t dictionaryValue, Vector3D positionOffset, Vector3D scaleOffset){
15 AddMorph(dictionaryValue, positionOffset, scaleOffset, Vector3D());
18template<size_t maxMorphs>
19void MorphTransform<maxMorphs>::AddMorph(uint16_t dictionaryValue, Vector3D positionOffset, Vector3D scaleOffset, Vector3D rotationOffset){
20 if(currentMorphs < maxMorphs){
23 for(uint8_t i = 0; i < currentMorphs; i++){
24 if(dictionary[i] == dictionaryValue){
31 positionOffsets[currentMorphs] = positionOffset;
32 scaleOffsets[currentMorphs] = scaleOffset;
33 rotationOffsets[currentMorphs] = rotationOffset;
35 dictionary[currentMorphs] = dictionaryValue;
41template<size_t maxMorphs>
42void MorphTransform<maxMorphs>::SetMorphPositionOffset(uint16_t dictionaryValue, Vector3D positionOffset){
43 bool hasIndex = false;
46 for(uint8_t i = 0; i < currentMorphs; i++){
47 if(dictionary[i] == dictionaryValue){
55 positionOffsets[index] = positionOffset;
59template<size_t maxMorphs>
60void MorphTransform<maxMorphs>::SetMorphScaleOffset(uint16_t dictionaryValue, Vector3D scaleOffset){
61 bool hasIndex = false;
64 for(uint8_t i = 0; i < currentMorphs; i++){
65 if(dictionary[i] == dictionaryValue){
73 scaleOffsets[index] = scaleOffset;
77template<size_t maxMorphs>
78void MorphTransform<maxMorphs>::SetMorphRotationOffset(uint16_t dictionaryValue, Vector3D rotationOffset){
79 bool hasIndex = false;
82 for(uint8_t i = 0; i < currentMorphs; i++){
83 if(dictionary[i] == dictionaryValue){
91 rotationOffsets[index] = rotationOffset;
95template<size_t maxMorphs>
96Vector3D MorphTransform<maxMorphs>::GetPositionOffset(){
97 Vector3D positionOffset;
99 for(uint8_t i = 0; i < currentMorphs; i++){
100 if (eEA->GetValue(dictionary[i]) > 0.0f){
101 positionOffset += positionOffsets[i] * eEA->GetValue(dictionary[i]);
105 return positionOffset;
108template<size_t maxMorphs>
109Vector3D MorphTransform<maxMorphs>::GetScaleOffset(){
110 Vector3D scaleOffset = Vector3D(1.0f, 1.0f, 1.0f);
113 for(uint8_t i = 0; i < currentMorphs; i++){
114 if (eEA->GetValue(dictionary[i]) > 0.0f){
115 scaleOffset = scaleOffset * Vector3D::LERP(Vector3D(1.0f, 1.0f, 1.0f), scaleOffsets[i], eEA->GetValue(dictionary[i]));
120 if(count) return scaleOffset;
121 else return Vector3D(1.0f, 1.0f, 1.0f);
124template<size_t maxMorphs>
125Vector3D MorphTransform<maxMorphs>::GetRotationOffset(){
126 Vector3D rotationOffset;
128 for(uint8_t i = 0; i < currentMorphs; i++){
129 if (eEA->GetValue(dictionary[i]) > 0.0f){
130 rotationOffset += rotationOffsets[i] * eEA->GetValue(dictionary[i]);
134 return rotationOffset;