PyramidTest.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2023 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include <TestFramework.h>
  5. #include <Tests/General/PyramidTest.h>
  6. #include <Jolt/Physics/Collision/Shape/BoxShape.h>
  7. #include <Jolt/Physics/Body/BodyCreationSettings.h>
  8. #include <Layers.h>
  9. JPH_IMPLEMENT_RTTI_VIRTUAL(PyramidTest)
  10. {
  11. JPH_ADD_BASE_CLASS(PyramidTest, Test)
  12. }
  13. void PyramidTest::Initialize()
  14. {
  15. // Floor
  16. CreateFloor();
  17. const float cBoxSize = 2.0f;
  18. const float cBoxSeparation = 0.5f;
  19. const float cHalfBoxSize = 0.5f * cBoxSize;
  20. const int cPyramidHeight = 15;
  21. RefConst<Shape> box_shape = new BoxShape(Vec3::sReplicate(cHalfBoxSize));
  22. // Pyramid
  23. for (int i = 0; i < cPyramidHeight; ++i)
  24. for (int j = i / 2; j < cPyramidHeight - (i + 1) / 2; ++j)
  25. for (int k = i / 2; k < cPyramidHeight - (i + 1) / 2; ++k)
  26. {
  27. RVec3 position(-cPyramidHeight + cBoxSize * j + (i & 1? cHalfBoxSize : 0.0f), 1.0f + (cBoxSize + cBoxSeparation) * i, -cPyramidHeight + cBoxSize * k + (i & 1? cHalfBoxSize : 0.0f));
  28. mBodyInterface->CreateAndAddBody(BodyCreationSettings(box_shape, position, Quat::sIdentity(), EMotionType::Dynamic, Layers::MOVING), EActivation::Activate);
  29. }
  30. }