| 1052 | }; |
| 1053 | |
| 1054 | void insertMorphTimeValue(std::vector<MorphTimeValues> &values, float time, float weight, unsigned int value) { |
| 1055 | MorphTimeValues::key k{}; |
| 1056 | k.mValue = value; |
| 1057 | k.mWeight = weight; |
| 1058 | if (values.empty() || time < values[0].mTime) { |
| 1059 | MorphTimeValues val; |
| 1060 | val.mTime = time; |
| 1061 | val.mKeys.push_back(k); |
| 1062 | values.insert(values.begin(), val); |
| 1063 | return; |
| 1064 | } |
| 1065 | if (time > values.back().mTime) { |
| 1066 | MorphTimeValues val; |
| 1067 | val.mTime = time; |
| 1068 | val.mKeys.push_back(k); |
| 1069 | values.insert(values.end(), val); |
| 1070 | return; |
| 1071 | } |
| 1072 | for (unsigned int i = 0; i < values.size(); i++) { |
| 1073 | if (std::abs(time - values[i].mTime) < ai_epsilon) { |
| 1074 | values[i].mKeys.push_back(k); |
| 1075 | return; |
| 1076 | } else if (time > values[i].mTime && time < values[i + 1].mTime) { |
| 1077 | MorphTimeValues val; |
| 1078 | val.mTime = time; |
| 1079 | val.mKeys.push_back(k); |
| 1080 | values.insert(values.begin() + i, val); |
| 1081 | return; |
| 1082 | } |
| 1083 | } |
| 1084 | } |
| 1085 | |
| 1086 | static float getWeightAtKey(const std::vector<MorphTimeValues> &values, int key, unsigned int value) { |
| 1087 | for (auto mKey : values[key].mKeys) { |