67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
|
|
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#include <Jolt/Jolt.h>
|
|
|
|
#include <Jolt/Physics/Collision/PhysicsMaterial.h>
|
|
#include <Jolt/Physics/Collision/PhysicsMaterialSimple.h>
|
|
#include <Jolt/Core/StreamIn.h>
|
|
#include <Jolt/Core/StreamOut.h>
|
|
#include <Jolt/Core/Factory.h>
|
|
|
|
JPH_NAMESPACE_BEGIN
|
|
|
|
RefConst<PhysicsMaterial> PhysicsMaterial::sDefault;
|
|
|
|
JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(PhysicsMaterial)
|
|
{
|
|
JPH_ADD_BASE_CLASS(PhysicsMaterial, SerializableObject)
|
|
}
|
|
|
|
void PhysicsMaterial::SaveBinaryState(StreamOut &inStream) const
|
|
{
|
|
inStream.Write(GetRTTI()->GetHash());
|
|
}
|
|
|
|
void PhysicsMaterial::RestoreBinaryState(StreamIn &inStream)
|
|
{
|
|
// RTTI hash is read in sRestoreFromBinaryState
|
|
}
|
|
|
|
PhysicsMaterial::PhysicsMaterialResult PhysicsMaterial::sRestoreFromBinaryState(StreamIn &inStream)
|
|
{
|
|
PhysicsMaterialResult result;
|
|
|
|
// Read the type of the material
|
|
uint32 hash;
|
|
inStream.Read(hash);
|
|
if (inStream.IsEOF() || inStream.IsFailed())
|
|
{
|
|
result.SetError("Failed to read type hash");
|
|
return result;
|
|
}
|
|
|
|
// Get the RTTI for the material
|
|
const RTTI *rtti = Factory::sInstance->Find(hash);
|
|
if (rtti == nullptr)
|
|
{
|
|
result.SetError("Failed to create instance of material");
|
|
return result;
|
|
}
|
|
|
|
// Construct and read the data of the material
|
|
Ref<PhysicsMaterial> material = reinterpret_cast<PhysicsMaterial *>(rtti->CreateObject());
|
|
material->RestoreBinaryState(inStream);
|
|
if (inStream.IsEOF() || inStream.IsFailed())
|
|
{
|
|
result.SetError("Failed to restore material");
|
|
return result;
|
|
}
|
|
|
|
result.Set(material);
|
|
return result;
|
|
}
|
|
|
|
JPH_NAMESPACE_END
|