void Shake::updateProgress() { Animator::updateProgress(); if (NodePtr targetNode = node.lock()) { float x = length * progress * timeScale; uint64_t x1 = static_cast<uint32_t>(x); uint64_t x2 = x1 + 1; float t = x - static_cast<float>(x1); Vector2 previousPosition; Vector2 nextPosition; if (x1 != 0) { previousPosition.x = (2.0f * (static_cast<float>(fnvHash(seedX | (x1 << 32))) / std::numeric_limits<uint64_t>::max()) - 1.0f) * distance.x; previousPosition.y = (2.0f * (static_cast<float>(fnvHash(seedY | (x1 << 32))) / std::numeric_limits<uint64_t>::max()) - 1.0f) * distance.y; } if (x2 != static_cast<uint32_t>(timeScale)) { nextPosition.x = (2.0f * (static_cast<float>(fnvHash(seedX | (x2 << 32))) / std::numeric_limits<uint64_t>::max()) - 1.0f) * distance.x; nextPosition.y = (2.0f * (static_cast<float>(fnvHash(seedY | (x2 << 32))) / std::numeric_limits<uint64_t>::max()) - 1.0f) * distance.y; } Vector2 noise(smoothstep(previousPosition.x, nextPosition.x, t), smoothstep(previousPosition.y, nextPosition.y, t)); targetNode->setPosition(startPosition + noise); } }
FnvHash(Wrapper wrapper) : hash_value(fnvHash(wrapper.str)) { }
Music::Music(const TChar* name, OSInternalSound* mus) : musicName(name), musicID(fnvHash(name)) { hardwareStream = mus; static_cast<XAudio2Stream*>(hardwareStream)->SetMusicRef(this); }