GroupFilter.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <Jolt/Core/Result.h>
  6. #include <Jolt/ObjectStream/SerializableObject.h>
  7. JPH_NAMESPACE_BEGIN
  8. class CollisionGroup;
  9. class StreamIn;
  10. class StreamOut;
  11. /// Abstract class that checks if two CollisionGroups collide
  12. class JPH_EXPORT GroupFilter : public SerializableObject, public RefTarget<GroupFilter>
  13. {
  14. public:
  15. JPH_DECLARE_SERIALIZABLE_ABSTRACT(JPH_EXPORT, GroupFilter)
  16. /// Virtual destructor
  17. virtual ~GroupFilter() override = default;
  18. /// Check if two groups collide
  19. virtual bool CanCollide(const CollisionGroup &inGroup1, const CollisionGroup &inGroup2) const = 0;
  20. /// Saves the contents of the group filter in binary form to inStream.
  21. virtual void SaveBinaryState(StreamOut &inStream) const;
  22. using GroupFilterResult = Result<Ref<GroupFilter>>;
  23. /// Creates a GroupFilter of the correct type and restores its contents from the binary stream inStream.
  24. static GroupFilterResult sRestoreFromBinaryState(StreamIn &inStream);
  25. protected:
  26. /// This function should not be called directly, it is used by sRestoreFromBinaryState.
  27. virtual void RestoreBinaryState(StreamIn &inStream);
  28. };
  29. JPH_NAMESPACE_END