Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
CollisionGroup.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
9
11
12class StreamIn;
13class StreamOut;
14
20{
22
23public:
24 using GroupID = uint32;
26
27 static const GroupID cInvalidGroup = ~GroupID(0);
28 static const SubGroupID cInvalidSubGroup = ~SubGroupID(0);
29
31 CollisionGroup() = default;
32
34 CollisionGroup(const GroupFilter *inFilter, GroupID inGroupID, SubGroupID inSubGroupID) : mGroupFilter(inFilter), mGroupID(inGroupID), mSubGroupID(inSubGroupID) { }
35
36
38 bool operator == (const CollisionGroup &inRHS) const
39 {
40 return mGroupFilter == inRHS.mGroupFilter && mGroupID == inRHS.mGroupID && mSubGroupID == inRHS.mSubGroupID;
41 }
42
43 bool operator != (const CollisionGroup &inRHS) const
44 {
45 return !(*this == inRHS);
46 }
47
49 inline void SetGroupFilter(const GroupFilter *inFilter)
50 {
51 mGroupFilter = inFilter;
52 }
53
55 inline const GroupFilter *GetGroupFilter() const
56 {
57 return mGroupFilter;
58 }
59
61 inline void SetGroupID(GroupID inID)
62 {
63 mGroupID = inID;
64 }
65
66 inline GroupID GetGroupID() const
67 {
68 return mGroupID;
69 }
70
72 inline void SetSubGroupID(SubGroupID inID)
73 {
74 mSubGroupID = inID;
75 }
76
78 {
79 return mSubGroupID;
80 }
81
83 bool CanCollide(const CollisionGroup &inOther) const
84 {
85 // Call the CanCollide function of the first group filter that's not null
86 if (mGroupFilter != nullptr)
87 return mGroupFilter->CanCollide(*this, inOther);
88 else if (inOther.mGroupFilter != nullptr)
89 return inOther.mGroupFilter->CanCollide(inOther, *this);
90 else
91 return true;
92 }
93
95 void SaveBinaryState(StreamOut &inStream) const;
96
98 void RestoreBinaryState(StreamIn &inStream);
99
102
103private:
104 RefConst<GroupFilter> mGroupFilter;
105 GroupID mGroupID = cInvalidGroup;
106 SubGroupID mSubGroupID = cInvalidSubGroup;
107};
108
#define JPH_EXPORT
Definition Core.h:283
#define JPH_NAMESPACE_END
Definition Core.h:434
std::uint32_t uint32
Definition Core.h:513
#define JPH_NAMESPACE_BEGIN
Definition Core.h:428
#define JPH_DECLARE_SERIALIZABLE_NON_VIRTUAL(linkage, class_name)
Definition SerializableObject.h:80
Definition CollisionGroup.h:20
GroupID GetGroupID() const
Definition CollisionGroup.h:66
SubGroupID GetSubGroupID() const
Definition CollisionGroup.h:77
void SetGroupFilter(const GroupFilter *inFilter)
Set the collision group filter.
Definition CollisionGroup.h:49
CollisionGroup(const GroupFilter *inFilter, GroupID inGroupID, SubGroupID inSubGroupID)
Construct with all properties.
Definition CollisionGroup.h:34
static const CollisionGroup sInvalid
An invalid collision group.
Definition CollisionGroup.h:101
void SetSubGroupID(SubGroupID inID)
Add this object to a sub group.
Definition CollisionGroup.h:72
bool CanCollide(const CollisionGroup &inOther) const
Check if this object collides with another object.
Definition CollisionGroup.h:83
uint32 GroupID
Definition CollisionGroup.h:24
void SetGroupID(GroupID inID)
Set the main group id for this object.
Definition CollisionGroup.h:61
const GroupFilter * GetGroupFilter() const
Get the collision group filter.
Definition CollisionGroup.h:55
CollisionGroup()=default
Default constructor.
uint32 SubGroupID
Definition CollisionGroup.h:25
Abstract class that checks if two CollisionGroups collide.
Definition GroupFilter.h:18
virtual bool CanCollide(const CollisionGroup &inGroup1, const CollisionGroup &inGroup2) const =0
Check if two groups collide.
Definition Reference.h:166
Simple binary input stream.
Definition StreamIn.h:13
Simple binary output stream.
Definition StreamOut.h:13