Path: blob/master/thirdparty/jolt_physics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp
9912 views
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)1// SPDX-FileCopyrightText: 2023 Jorrit Rouwe2// SPDX-License-Identifier: MIT34#include <Jolt/Jolt.h>56#include <Jolt/Physics/SoftBody/SoftBodyCreationSettings.h>7#include <Jolt/ObjectStream/TypeDeclarations.h>8#include <Jolt/Core/StreamIn.h>9#include <Jolt/Core/StreamOut.h>1011JPH_NAMESPACE_BEGIN1213JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(SoftBodyCreationSettings)14{15JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mSettings)16JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mPosition)17JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mRotation)18JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mUserData)19JPH_ADD_ENUM_ATTRIBUTE(SoftBodyCreationSettings, mObjectLayer)20JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mCollisionGroup)21JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mNumIterations)22JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mLinearDamping)23JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mMaxLinearVelocity)24JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mRestitution)25JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mFriction)26JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mPressure)27JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mGravityFactor)28JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mUpdatePosition)29JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mMakeRotationIdentity)30JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mAllowSleeping)31}3233void SoftBodyCreationSettings::SaveBinaryState(StreamOut &inStream) const34{35inStream.Write(mPosition);36inStream.Write(mRotation);37inStream.Write(mUserData);38inStream.Write(mObjectLayer);39mCollisionGroup.SaveBinaryState(inStream);40inStream.Write(mNumIterations);41inStream.Write(mLinearDamping);42inStream.Write(mMaxLinearVelocity);43inStream.Write(mRestitution);44inStream.Write(mFriction);45inStream.Write(mPressure);46inStream.Write(mGravityFactor);47inStream.Write(mUpdatePosition);48inStream.Write(mMakeRotationIdentity);49inStream.Write(mAllowSleeping);50}5152void SoftBodyCreationSettings::RestoreBinaryState(StreamIn &inStream)53{54inStream.Read(mPosition);55inStream.Read(mRotation);56inStream.Read(mUserData);57inStream.Read(mObjectLayer);58mCollisionGroup.RestoreBinaryState(inStream);59inStream.Read(mNumIterations);60inStream.Read(mLinearDamping);61inStream.Read(mMaxLinearVelocity);62inStream.Read(mRestitution);63inStream.Read(mFriction);64inStream.Read(mPressure);65inStream.Read(mGravityFactor);66inStream.Read(mUpdatePosition);67inStream.Read(mMakeRotationIdentity);68inStream.Read(mAllowSleeping);69}7071void SoftBodyCreationSettings::SaveWithChildren(StreamOut &inStream, SharedSettingsToIDMap *ioSharedSettingsMap, MaterialToIDMap *ioMaterialMap, GroupFilterToIDMap *ioGroupFilterMap) const72{73// Save creation settings74SaveBinaryState(inStream);7576// Save shared settings77if (ioSharedSettingsMap != nullptr && ioMaterialMap != nullptr)78mSettings->SaveWithMaterials(inStream, *ioSharedSettingsMap, *ioMaterialMap);79else80inStream.Write(~uint32(0));8182// Save group filter83StreamUtils::SaveObjectReference(inStream, mCollisionGroup.GetGroupFilter(), ioGroupFilterMap);84}8586SoftBodyCreationSettings::SBCSResult SoftBodyCreationSettings::sRestoreWithChildren(StreamIn &inStream, IDToSharedSettingsMap &ioSharedSettingsMap, IDToMaterialMap &ioMaterialMap, IDToGroupFilterMap &ioGroupFilterMap)87{88SBCSResult result;8990// Read creation settings91SoftBodyCreationSettings settings;92settings.RestoreBinaryState(inStream);93if (inStream.IsEOF() || inStream.IsFailed())94{95result.SetError("Error reading body creation settings");96return result;97}9899// Read shared settings100SoftBodySharedSettings::SettingsResult settings_result = SoftBodySharedSettings::sRestoreWithMaterials(inStream, ioSharedSettingsMap, ioMaterialMap);101if (settings_result.HasError())102{103result.SetError(settings_result.GetError());104return result;105}106settings.mSettings = settings_result.Get();107108// Read group filter109Result gfresult = StreamUtils::RestoreObjectReference(inStream, ioGroupFilterMap);110if (gfresult.HasError())111{112result.SetError(gfresult.GetError());113return result;114}115settings.mCollisionGroup.SetGroupFilter(gfresult.Get());116117result.Set(settings);118return result;119}120121JPH_NAMESPACE_END122123124