text: // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  // SPDX-License-Identifier: MIT
  
  #pragma once
  
  #include <Tests/Test.h>
  #include <Jolt/Skeleton/Skeleton.h>
  #include <Jolt/Skeleton/SkeletalAnimation.h>
  #include <Jolt/Skeleton/SkeletonPose.h>
  #include <Utils/RagdollLoader.h>
  #include <Jolt/Physics/Ragdoll/Ragdoll.h>
  
  // This test tests a kinematic ragdoll moving towards a wall of boxes
  class KinematicRigTest : public Test
  {
  public:
  	JPH_DECLARE_RTTI_VIRTUAL(KinematicRigTest)
  
  	// Destructor
  	virtual					~KinematicRigTest() override;
  
  	// Number used to scale the terrain and camera movement to the scene
  	virtual float			GetWorldScale() const override								{ return 0.2f; }
  
  	virtual void			Initialize() override;
  	virtual void			PrePhysicsUpdate(const PreUpdateParams &inParams) override;
  
  	// Optional settings menu
  	virtual bool			HasSettingsMenu() const override							{ return true; }
  	virtual void			CreateSettingsMenu(DebugUI *inUI, UIElement *inSubMenu) override;
  
  	// Saving / restoring state for replay
  	virtual void			SaveState(StateRecorder &inStream) const override;
  	virtual void			RestoreState(StateRecorder &inStream) override;
  
  private:
  	// List of possible animation names
  	static const char *		sAnimations[];
  
  	// Filename of animation to load for this test
  	static const char *		sAnimationName;
  
  	float					mTime = 0.0f;
  	Ref<RagdollSettings>	mRagdollSettings;
  	Ref<Ragdoll>			mRagdoll;
  	Ref<SkeletalAnimation>	mAnimation;
  	SkeletonPose			mPose;
  };
  