Path: blob/master/thirdparty/jolt_physics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp
21520 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, mVertexRadius)29JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mUpdatePosition)30JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mMakeRotationIdentity)31JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mAllowSleeping)32JPH_ADD_ATTRIBUTE(SoftBodyCreationSettings, mFacesDoubleSided)33}3435void SoftBodyCreationSettings::SaveBinaryState(StreamOut &inStream) const36{37inStream.Write(mPosition);38inStream.Write(mRotation);39inStream.Write(mUserData);40inStream.Write(mObjectLayer);41mCollisionGroup.SaveBinaryState(inStream);42inStream.Write(mNumIterations);43inStream.Write(mLinearDamping);44inStream.Write(mMaxLinearVelocity);45inStream.Write(mRestitution);46inStream.Write(mFriction);47inStream.Write(mPressure);48inStream.Write(mGravityFactor);49inStream.Write(mVertexRadius);50inStream.Write(mUpdatePosition);51inStream.Write(mMakeRotationIdentity);52inStream.Write(mAllowSleeping);53inStream.Write(mFacesDoubleSided);54}5556void SoftBodyCreationSettings::RestoreBinaryState(StreamIn &inStream)57{58inStream.Read(mPosition);59inStream.Read(mRotation);60inStream.Read(mUserData);61inStream.Read(mObjectLayer);62mCollisionGroup.RestoreBinaryState(inStream);63inStream.Read(mNumIterations);64inStream.Read(mLinearDamping);65inStream.Read(mMaxLinearVelocity);66inStream.Read(mRestitution);67inStream.Read(mFriction);68inStream.Read(mPressure);69inStream.Read(mGravityFactor);70inStream.Read(mVertexRadius);71inStream.Read(mUpdatePosition);72inStream.Read(mMakeRotationIdentity);73inStream.Read(mAllowSleeping);74inStream.Read(mFacesDoubleSided);75}7677void SoftBodyCreationSettings::SaveWithChildren(StreamOut &inStream, SharedSettingsToIDMap *ioSharedSettingsMap, MaterialToIDMap *ioMaterialMap, GroupFilterToIDMap *ioGroupFilterMap) const78{79// Save creation settings80SaveBinaryState(inStream);8182// Save shared settings83if (ioSharedSettingsMap != nullptr && ioMaterialMap != nullptr)84mSettings->SaveWithMaterials(inStream, *ioSharedSettingsMap, *ioMaterialMap);85else86inStream.Write(~uint32(0));8788// Save group filter89StreamUtils::SaveObjectReference(inStream, mCollisionGroup.GetGroupFilter(), ioGroupFilterMap);90}9192SoftBodyCreationSettings::SBCSResult SoftBodyCreationSettings::sRestoreWithChildren(StreamIn &inStream, IDToSharedSettingsMap &ioSharedSettingsMap, IDToMaterialMap &ioMaterialMap, IDToGroupFilterMap &ioGroupFilterMap)93{94SBCSResult result;9596// Read creation settings97SoftBodyCreationSettings settings;98settings.RestoreBinaryState(inStream);99if (inStream.IsEOF() || inStream.IsFailed())100{101result.SetError("Error reading body creation settings");102return result;103}104105// Read shared settings106SoftBodySharedSettings::SettingsResult settings_result = SoftBodySharedSettings::sRestoreWithMaterials(inStream, ioSharedSettingsMap, ioMaterialMap);107if (settings_result.HasError())108{109result.SetError(settings_result.GetError());110return result;111}112settings.mSettings = settings_result.Get();113114// Read group filter115Result gfresult = StreamUtils::RestoreObjectReference(inStream, ioGroupFilterMap);116if (gfresult.HasError())117{118result.SetError(gfresult.GetError());119return result;120}121settings.mCollisionGroup.SetGroupFilter(gfresult.Get());122123result.Set(settings);124return result;125}126127JPH_NAMESPACE_END128129130