CharacterPlanetTest.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2024 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Tests/Test.h>
  6. #include <Jolt/Physics/Character/CharacterVirtual.h>
  7. #include <Jolt/Physics/PhysicsStepListener.h>
  8. class CharacterPlanetTest : public Test, public PhysicsStepListener, public CharacterContactListener
  9. {
  10. public:
  11. JPH_DECLARE_RTTI_VIRTUAL(JPH_NO_EXPORT, CharacterPlanetTest)
  12. // Description of the test
  13. virtual const char * GetDescription() const override
  14. {
  15. return "Demonstrates how to do custom gravity to simulate a character walking on a planet.";
  16. }
  17. // Initialize the test
  18. virtual void Initialize() override;
  19. // Process input
  20. virtual void ProcessInput(const ProcessInputParams &inParams) override;
  21. // Update the test, called before the physics update
  22. virtual void PrePhysicsUpdate(const PreUpdateParams &inParams) override;
  23. // Override to specify the initial camera state (local to GetCameraPivot)
  24. virtual void GetInitialCamera(CameraState &ioState) const override;
  25. // Override to specify a camera pivot point and orientation (world space)
  26. virtual RMat44 GetCameraPivot(float inCameraHeading, float inCameraPitch) const override;
  27. // Saving / restoring state for replay
  28. virtual void SaveState(StateRecorder &inStream) const override;
  29. virtual void RestoreState(StateRecorder &inStream) override;
  30. // Saving / restoring controller input state for replay
  31. virtual void SaveInputState(StateRecorder &inStream) const override;
  32. virtual void RestoreInputState(StateRecorder &inStream) override;
  33. // See: PhysicsStepListener
  34. virtual void OnStep(const PhysicsStepListenerContext &inContext) override;
  35. // See: CharacterContactListener
  36. virtual void OnContactAdded(const CharacterVirtual *inCharacter, const BodyID &inBodyID2, const SubShapeID &inSubShapeID2, RVec3Arg inContactPosition, Vec3Arg inContactNormal, CharacterContactSettings &ioSettings) override;
  37. private:
  38. // Planet size
  39. static constexpr float cPlanetRadius = 20.0f;
  40. // Character size
  41. static constexpr float cCharacterHeightStanding = 1.35f;
  42. static constexpr float cCharacterRadiusStanding = 0.3f;
  43. static constexpr float cCharacterSpeed = 6.0f;
  44. static constexpr float cJumpSpeed = 4.0f;
  45. // The 'player' character
  46. Ref<CharacterVirtual> mCharacter;
  47. // Player input
  48. Vec3 mDesiredVelocity = Vec3::sZero();
  49. Vec3 mDesiredVelocityWS = Vec3::sZero();
  50. bool mJump = false;
  51. bool mWasJump = false;
  52. };