Path: blob/master/thirdparty/jolt_physics/Jolt/Core/LinearCurve.cpp
9906 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2021 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#include <Jolt/Jolt.h>56#include <Jolt/Core/LinearCurve.h>7#include <Jolt/Core/StreamIn.h>8#include <Jolt/Core/StreamOut.h>9#include <Jolt/ObjectStream/TypeDeclarations.h>1011JPH_NAMESPACE_BEGIN1213JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(LinearCurve::Point)14{15JPH_ADD_ATTRIBUTE(Point, mX)16JPH_ADD_ATTRIBUTE(Point, mY)17}1819JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(LinearCurve)20{21JPH_ADD_ATTRIBUTE(LinearCurve, mPoints)22}2324float LinearCurve::GetValue(float inX) const25{26if (mPoints.empty())27return 0.0f;2829Points::const_iterator i2 = std::lower_bound(mPoints.begin(), mPoints.end(), inX, [](const Point &inPoint, float inValue) { return inPoint.mX < inValue; });3031if (i2 == mPoints.begin())32return mPoints.front().mY;33else if (i2 == mPoints.end())34return mPoints.back().mY;3536Points::const_iterator i1 = i2 - 1;37return i1->mY + (inX - i1->mX) * (i2->mY - i1->mY) / (i2->mX - i1->mX);38}3940void LinearCurve::SaveBinaryState(StreamOut &inStream) const41{42inStream.Write(mPoints);43}4445void LinearCurve::RestoreBinaryState(StreamIn &inStream)46{47inStream.Read(mPoints);48}4950JPH_NAMESPACE_END515253