#include "Contents/ModelNode.h" #include // OFFSET: 0x00540EA0 // FUNCTION: fn_01727 void SampleModelTexture(const ModelTextureChannels& channels, float frame, ModelTextureTransform& output) { for (int channel = 0; channel < 5; ++channel) { const auto found = channels.find(channel); if (found == channels.end()) { continue; } const auto& keys = found->second; const int last = std::bit_cast(keys.back()[0]); if (frame >= static_cast(last)) { output.values[channel] = std::bit_cast(keys.back()[1]); continue; } unsigned next = 1; while (next < keys.size() && !(static_cast(std::bit_cast(keys[next][0])) > frame)) { ++next; } const int previous = std::bit_cast(keys[next - 1][0]); const int difference = std::bit_cast(keys[next][0] - keys[next - 1][0]); const float amount = (frame - static_cast(previous)) / static_cast(difference); const float first = (1.0f - amount) * std::bit_cast(keys[next - 1][1]); const float second = amount * std::bit_cast(keys[next][1]); output.values[channel] = first + second; } }