Layers.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  2. // SPDX-License-Identifier: MIT
  3. #pragma once
  4. #include <Physics/Collision/ObjectLayer.h>
  5. #include <Physics/Collision/BroadPhase/BroadPhaseLayer.h>
  6. /// Layer that objects can be in, determines which other objects it can collide with
  7. namespace Layers
  8. {
  9. static constexpr uint8 NON_MOVING = 0;
  10. static constexpr uint8 MOVING = 1;
  11. static constexpr uint8 NUM_LAYERS = 2;
  12. };
  13. /// Function that determines if two object layers can collide
  14. inline bool ObjectCanCollide(ObjectLayer inObject1, ObjectLayer inObject2)
  15. {
  16. switch (inObject1)
  17. {
  18. case Layers::NON_MOVING:
  19. return inObject2 == Layers::MOVING; // Non moving only collides with moving
  20. case Layers::MOVING:
  21. return true; // Moving collides with everything
  22. default:
  23. JPH_ASSERT(false);
  24. return false;
  25. }
  26. };
  27. /// Broadphase layers
  28. namespace BroadPhaseLayers
  29. {
  30. static constexpr BroadPhaseLayer NON_MOVING(0);
  31. static constexpr BroadPhaseLayer MOVING(1);
  32. };
  33. /// Function that determines if two broadphase layers can collide
  34. inline bool BroadPhaseCanCollide(ObjectLayer inLayer1, BroadPhaseLayer inLayer2)
  35. {
  36. switch (inLayer1)
  37. {
  38. case Layers::NON_MOVING:
  39. return inLayer2 == BroadPhaseLayers::MOVING;
  40. case Layers::MOVING:
  41. return true;
  42. default:
  43. JPH_ASSERT(false);
  44. return false;
  45. }
  46. }
  47. /// Create mapping table from layer to broadphase layer
  48. inline ObjectToBroadPhaseLayer GetObjectToBroadPhaseLayer()
  49. {
  50. ObjectToBroadPhaseLayer object_to_broadphase;
  51. object_to_broadphase.resize(Layers::NUM_LAYERS);
  52. object_to_broadphase[Layers::NON_MOVING] = BroadPhaseLayers::NON_MOVING;
  53. object_to_broadphase[Layers::MOVING] = BroadPhaseLayers::MOVING;
  54. return object_to_broadphase;
  55. }