CharacterBase.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include <Jolt/Jolt.h>
  5. #include <Jolt/Physics/Character/CharacterBase.h>
  6. #include <Jolt/Physics/StateRecorder.h>
  7. JPH_NAMESPACE_BEGIN
  8. CharacterBase::CharacterBase(const CharacterBaseSettings *inSettings, PhysicsSystem *inSystem) :
  9. mSystem(inSystem),
  10. mShape(inSettings->mShape),
  11. mUp(inSettings->mUp),
  12. mSupportingVolume(inSettings->mSupportingVolume)
  13. {
  14. // Initialize max slope angle
  15. SetMaxSlopeAngle(inSettings->mMaxSlopeAngle);
  16. }
  17. const char *CharacterBase::sToString(EGroundState inState)
  18. {
  19. switch (inState)
  20. {
  21. case EGroundState::OnGround: return "OnGround";
  22. case EGroundState::OnSteepGround: return "OnSteepGround";
  23. case EGroundState::NotSupported: return "NotSupported";
  24. case EGroundState::InAir: return "InAir";
  25. }
  26. JPH_ASSERT(false);
  27. return "Unknown";
  28. }
  29. void CharacterBase::SaveState(StateRecorder &inStream) const
  30. {
  31. inStream.Write(mGroundState);
  32. inStream.Write(mGroundBodyID);
  33. inStream.Write(mGroundBodySubShapeID);
  34. inStream.Write(mGroundPosition);
  35. inStream.Write(mGroundNormal);
  36. inStream.Write(mGroundVelocity);
  37. // Can't save user data (may be a pointer) and material
  38. }
  39. void CharacterBase::RestoreState(StateRecorder &inStream)
  40. {
  41. inStream.Read(mGroundState);
  42. inStream.Read(mGroundBodyID);
  43. inStream.Read(mGroundBodySubShapeID);
  44. inStream.Read(mGroundPosition);
  45. inStream.Read(mGroundNormal);
  46. inStream.Read(mGroundVelocity);
  47. mGroundUserData = 0; // Cannot restore user data
  48. mGroundMaterial = PhysicsMaterial::sDefault; // Cannot restore material
  49. }
  50. JPH_NAMESPACE_END