GroupFilter.h 1.2 KB

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