Skip to main content

CollisionComponent Class

Defines collision layer membership and interaction masks for a GameObject. More...

Declaration

class helios::engine::modules::physics::collision::components::CollisionComponent { ... }

Public Constructors Index

CollisionComponent (uint32_t layerId, bool isCollisionReporter=true, uint32_t solidCollisionMask=0, uint32_t triggerCollisionMask=0)

Constructs a CollisionComponent with a layer ID. More...

CollisionComponent (const CollisionComponent &other)

Copy constructor. More...

CollisionComponent (CollisionComponent &&) noexcept=default

Public Operators Index

CollisionComponent &operator= (const CollisionComponent &)=default
CollisionComponent &operator= (CollisionComponent &&) noexcept=default

Public Member Functions Index

boolisEnabled () const noexcept

Checks whether this component is enabled. More...

voidenable () noexcept

Enables this component. More...

voiddisable () noexcept

Disables this component. More...

voidsetIsCollisionReporter (bool isCollisionReporter)

Sets whether this component should report collision events. More...

voidsetHitPolicy (const helios::engine::modules::physics::collision::types::HitPolicy hitPolicy)

Sets the hit policy for collision detection. More...

helios::engine::modules::physics::collision::types::HitPolicyhitPolicy () const noexcept

Returns the current hit policy. More...

boolisCollisionReporter () const noexcept

Returns whether this component can emit collision events. More...

CollisionComponent &setSolidCollisionMask (const uint32_t solidCollisionMask) noexcept

Sets the solid collision mask. More...

CollisionComponent &setTriggerCollisionMask (const uint32_t triggerCollisionMask) noexcept

Sets the trigger collision mask. More...

uint32_tsolidCollisionMask () const noexcept

Returns the solid collision mask. More...

uint32_ttriggerCollisionMask () const noexcept

Returns the trigger collision mask. More...

unsigned intlayerId () const noexcept

Returns the collision layer ID. More...

CollisionComponent &addSolidCollisionBehavior (const helios::engine::modules::physics::collision::types::CollisionBehavior collisionBehavior, const uint32_t otherLayerId) noexcept

Adds a solid collision behavior for a specific layer. More...

helios::engine::modules::physics::collision::types::CollisionBehaviorsolidCollisionBehavior (uint32_t otherLayerId) const noexcept

Returns the solid collision behavior for a specific layer. More...

helios::engine::modules::physics::collision::types::CollisionBehaviortriggerCollisionBehavior (uint32_t otherLayerId) const noexcept

Returns the trigger collision behavior for a specific layer. More...

CollisionComponent &addTriggerCollisionBehavior (const helios::engine::modules::physics::collision::types::CollisionBehavior collisionBehavior, const uint32_t otherLayerId) noexcept

Adds a trigger collision behavior for a specific layer. More...

Private Member Attributes Index

size_tCollisionBehaviorSize = helios::engine::modules::physics::collision::types::CollisionBehaviorItemSize
uint32_tlayerId_ {}

The collision layer this component belongs to. More...

uint32_ttriggerCollisionMask_ {}

Bitmask specifying layers that generate trigger collisions. More...

uint32_tsolidCollisionMask_ {}

Bitmask specifying layers that generate solid collisions. More...

boolisCollisionReporter_ = true

Flag indicating whether this component can report collision events. More...

std::array< uint32_t, helios::engine::modules::physics::collision::types::CollisionBehaviorItemSize >solidCollisionBehavior_ {}

Per-behavior layer masks for solid collisions. More...

std::array< uint32_t, helios::engine::modules::physics::collision::types::CollisionBehaviorItemSize >triggerCollisionBehavior_ {}

Per-behavior layer masks for trigger collisions. More...

helios::engine::modules::physics::collision::types::HitPolicyhitPolicy_ = types::HitPolicy::OneHit

Controls how many collisions are reported per frame. More...

boolisEnabled_ = true

Whether this component is enabled. More...

Description

Defines collision layer membership and interaction masks for a GameObject.

CollisionComponent enables layer-based collision filtering by assigning each entity to a specific layer and defining which other layers it can interact with. Two separate bitmasks control trigger (non-physical) or solid (physical) collision generation.

Trigger collisions are asymmetric: entity A can detect entity B without B detecting A. Solid collisions should be treated symmetrically by the collision system.

The collision reporter flag controls whether this entity can emit collision events. Non-reporter entities participate in collision detection but do not generate events.

Example usage: ```cpp constexpr uint32_t LAYER_PLAYER = 1 << 0; constexpr uint32_t LAYER_ENEMY = 1 << 1; constexpr uint32_t LAYER_BULLET = 1 << 2;

auto& collision = gameObject.add<CollisionComponent>(LAYER_PLAYER); collision.setTriggerCollisionMask(LAYER_ENEMY | LAYER_BULLET); collision.setSolidCollisionMask(LAYER_ENEMY); ```

Definition at line 46 of file CollisionComponent.ixx.

Public Constructors

CollisionComponent()

helios::engine::modules::physics::collision::components::CollisionComponent::CollisionComponent (uint32_t layerId, bool isCollisionReporter=true, uint32_t solidCollisionMask=0, uint32_t triggerCollisionMask=0)
inline explicit

Constructs a CollisionComponent with a layer ID.

Parameters
layerId

The collision layer this entity belongs to.

isCollisionReporter

Whether this entity can emit collision events.

solidCollisionMask

Initial bitmask for solid collisions.

triggerCollisionMask

Initial bitmask for trigger collisions.

Definition at line 150 of file CollisionComponent.ixx.

150 explicit CollisionComponent(uint32_t layerId, bool isCollisionReporter = true,
151 uint32_t solidCollisionMask = 0, uint32_t triggerCollisionMask = 0
152 ) :
153 layerId_(layerId),
154 isCollisionReporter_(isCollisionReporter),
155 solidCollisionMask_(solidCollisionMask),
156 triggerCollisionMask_(triggerCollisionMask){}

References isCollisionReporter, layerId, solidCollisionMask and triggerCollisionMask.

Referenced by addSolidCollisionBehavior, addTriggerCollisionBehavior, CollisionComponent, CollisionComponent, operator=, operator=, setSolidCollisionMask and setTriggerCollisionMask.

CollisionComponent()

helios::engine::modules::physics::collision::components::CollisionComponent::CollisionComponent (const CollisionComponent & other)
inline

Copy constructor.

Creates a deep copy of the collision component, preserving layer ID, masks, and all behavior configurations.

Parameters
other

The component to copy from.

Definition at line 166 of file CollisionComponent.ixx.

167 layerId_(other.layerId_),
168 isCollisionReporter_(other.isCollisionReporter_),
169 solidCollisionMask_(other.solidCollisionMask_),
170 triggerCollisionMask_(other.triggerCollisionMask_),
171 solidCollisionBehavior_(other.solidCollisionBehavior_),
172 triggerCollisionBehavior_(other.triggerCollisionBehavior_),
173 hitPolicy_(other.hitPolicy_)
174 {}

Reference CollisionComponent.

CollisionComponent()

helios::engine::modules::physics::collision::components::CollisionComponent::CollisionComponent (CollisionComponent &&)
noexcept default

Definition at line 177 of file CollisionComponent.ixx.

Reference CollisionComponent.

Public Operators

operator=()

CollisionComponent & helios::engine::modules::physics::collision::components::CollisionComponent::operator= (const CollisionComponent &)
default

Definition at line 176 of file CollisionComponent.ixx.

Reference CollisionComponent.

operator=()

CollisionComponent & helios::engine::modules::physics::collision::components::CollisionComponent::operator= (CollisionComponent &&)
noexcept default

Definition at line 178 of file CollisionComponent.ixx.

Reference CollisionComponent.

Public Member Functions

addSolidCollisionBehavior()

CollisionComponent & helios::engine::modules::physics::collision::components::CollisionComponent::addSolidCollisionBehavior (const helios::engine::modules::physics::collision::types::CollisionBehavior collisionBehavior, const uint32_t otherLayerId)
inline noexcept

Adds a solid collision behavior for a specific layer.

Associates a collision behavior with a target layer for solid collisions. If a behavior was previously set for the same layer, it is replaced.

Parameters
collisionBehavior

The behavior to apply on collision.

otherLayerId

The layer ID to associate the behavior with.

Returns

Reference to this component for method chaining.

Definition at line 288 of file CollisionComponent.ixx.

290 const uint32_t otherLayerId
291 ) noexcept {
292
293 // remove previous entries for the layerid
294 for (auto& behavior : solidCollisionBehavior_) {
295 behavior &= ~otherLayerId;
296 }
297
298 const auto rawMask = std::to_underlying(collisionBehavior);
299 for (int i = 0; i < CollisionBehaviorSize; i++) {
300 if ((rawMask >> i ) & 1) {
301 solidCollisionBehavior_[i] |= otherLayerId;
302 }
303 }
304
305 return *this;
306 }

Reference CollisionComponent.

addTriggerCollisionBehavior()

CollisionComponent & helios::engine::modules::physics::collision::components::CollisionComponent::addTriggerCollisionBehavior (const helios::engine::modules::physics::collision::types::CollisionBehavior collisionBehavior, const uint32_t otherLayerId)
inline noexcept

Adds a trigger collision behavior for a specific layer.

Associates a collision behavior with a target layer for trigger collisions. If a behavior was previously set for the same layer, it is replaced.

Parameters
collisionBehavior

The behavior to apply on collision.

otherLayerId

The layer ID to associate the behavior with.

Returns

Reference to this component for method chaining.

Definition at line 374 of file CollisionComponent.ixx.

376 const uint32_t otherLayerId
377 ) noexcept {
378
379 // remove previous entries for the layerid
380 for (auto& behavior : triggerCollisionBehavior_) {
381 behavior &= ~otherLayerId;
382 }
383
384 const auto rawMask = std::to_underlying(collisionBehavior);
385 for (int i = 0; i < CollisionBehaviorSize; i++) {
386 if ((rawMask >> i ) & 1) {
387 triggerCollisionBehavior_[i] |= otherLayerId;
388 }
389 }
390
391 return *this;
392 }

Reference CollisionComponent.

disable()

void helios::engine::modules::physics::collision::components::CollisionComponent::disable ()
inline noexcept

Disables this component.

Definition at line 138 of file CollisionComponent.ixx.

138 void disable() noexcept {
139 isEnabled_ = false;
140 }

enable()

void helios::engine::modules::physics::collision::components::CollisionComponent::enable ()
inline noexcept

Enables this component.

Definition at line 131 of file CollisionComponent.ixx.

131 void enable() noexcept {
132 isEnabled_ = true;
133 }

hitPolicy()

helios::engine::modules::physics::collision::types::HitPolicy helios::engine::modules::physics::collision::components::CollisionComponent::hitPolicy ()
inline nodiscard noexcept

Returns the current hit policy.

Returns

The configured HitPolicy for this component.

See Also

HitPolicy

Definition at line 213 of file CollisionComponent.ixx.

214 return hitPolicy_;
215 }

Referenced by setHitPolicy and helios::engine::modules::physics::collision::systems::GridCollisionDetectionSystem::solveCell.

isCollisionReporter()

bool helios::engine::modules::physics::collision::components::CollisionComponent::isCollisionReporter ()
inline nodiscard noexcept

Returns whether this component can emit collision events.

Returns

True if collision events can be generated, false otherwise.

Definition at line 222 of file CollisionComponent.ixx.

222 [[nodiscard]] bool isCollisionReporter() const noexcept {
223 return isCollisionReporter_;
224 }

Referenced by CollisionComponent and setIsCollisionReporter.

isEnabled()

bool helios::engine::modules::physics::collision::components::CollisionComponent::isEnabled ()
inline nodiscard noexcept

Checks whether this component is enabled.

Returns

True if enabled, false otherwise.

Definition at line 124 of file CollisionComponent.ixx.

124 [[nodiscard]] bool isEnabled() const noexcept {
125 return isEnabled_;
126 }

Referenced by helios::engine::modules::physics::collision::systems::GridCollisionDetectionSystem::update.

layerId()

unsigned int helios::engine::modules::physics::collision::components::CollisionComponent::layerId ()
inline nodiscard noexcept

Returns the collision layer ID.

Returns

The layer this entity belongs to.

Definition at line 273 of file CollisionComponent.ixx.

273 [[nodiscard]] unsigned int layerId() const noexcept {
274 return layerId_;
275 }

Referenced by CollisionComponent.

setHitPolicy()

void helios::engine::modules::physics::collision::components::CollisionComponent::setHitPolicy (const helios::engine::modules::physics::collision::types::HitPolicy hitPolicy)
inline

Sets the hit policy for collision detection.

Controls how many collision events this entity can receive per frame:

  • `OneHit`: Only the first collision is reported (default)
  • `All`: All collisions are reported
Parameters
hitPolicy

The hit policy to apply.

See Also

HitPolicy

Definition at line 202 of file CollisionComponent.ixx.

Reference hitPolicy.

setIsCollisionReporter()

void helios::engine::modules::physics::collision::components::CollisionComponent::setIsCollisionReporter (bool isCollisionReporter)
inline

Sets whether this component should report collision events.

Parameters
isCollisionReporter

True to enable event reporting, false to disable.

Definition at line 186 of file CollisionComponent.ixx.

187 isCollisionReporter_ = isCollisionReporter;
188 }

References isCollisionReporter and setIsCollisionReporter.

Referenced by setIsCollisionReporter.

setSolidCollisionMask()

CollisionComponent & helios::engine::modules::physics::collision::components::CollisionComponent::setSolidCollisionMask (const uint32_t solidCollisionMask)
inline noexcept

Sets the solid collision mask.

Parameters
solidCollisionMask

Bitmask of layers to generate solid collisions with.

Returns

Reference to this component for method chaining.

Definition at line 233 of file CollisionComponent.ixx.

234 solidCollisionMask_ = solidCollisionMask;
235 return *this;
236 }

References CollisionComponent and solidCollisionMask.

setTriggerCollisionMask()

CollisionComponent & helios::engine::modules::physics::collision::components::CollisionComponent::setTriggerCollisionMask (const uint32_t triggerCollisionMask)
inline noexcept

Sets the trigger collision mask.

Parameters
triggerCollisionMask

Bitmask of layers to generate trigger collisions with.

Returns

Reference to this component for method chaining.

Definition at line 245 of file CollisionComponent.ixx.

246 triggerCollisionMask_ = triggerCollisionMask;
247 return *this;
248 }

References CollisionComponent and triggerCollisionMask.

solidCollisionBehavior()

helios::engine::modules::physics::collision::types::CollisionBehavior helios::engine::modules::physics::collision::components::CollisionComponent::solidCollisionBehavior (uint32_t otherLayerId)
inline nodiscard noexcept

Returns the solid collision behavior for a specific layer.

Looks up the configured behavior for collisions with the specified layer. Returns `CollisionBehavior::None` if no solid collision mask is set for the layer.

Parameters
otherLayerId

The layer ID to query.

Returns

The collision behavior for the specified layer.

Definition at line 318 of file CollisionComponent.ixx.

320 if ((solidCollisionMask_ & otherLayerId) == 0) {
321 return CollisionBehavior::None;
322 }
323
324 auto resultMask = CollisionBehavior::None;
325 for (int i = 0; i < solidCollisionBehavior_.size(); i++) {
326
327 if ((solidCollisionBehavior_[i] & otherLayerId) != 0) {
328 resultMask = resultMask | static_cast<CollisionBehavior>(1 << i);
329 }
330 }
331
332 return resultMask;
333 }

solidCollisionMask()

uint32_t helios::engine::modules::physics::collision::components::CollisionComponent::solidCollisionMask ()
inline nodiscard noexcept

Returns the solid collision mask.

Returns

Bitmask of layers this entity generates solid collisions with.

Definition at line 255 of file CollisionComponent.ixx.

255 [[nodiscard]] uint32_t solidCollisionMask() const noexcept {
256 return solidCollisionMask_;
257 }

Referenced by CollisionComponent, setSolidCollisionMask and helios::engine::modules::physics::collision::systems::GridCollisionDetectionSystem::update.

triggerCollisionBehavior()

helios::engine::modules::physics::collision::types::CollisionBehavior helios::engine::modules::physics::collision::components::CollisionComponent::triggerCollisionBehavior (uint32_t otherLayerId)
inline nodiscard noexcept

Returns the trigger collision behavior for a specific layer.

Looks up the configured behavior for trigger collisions with the specified layer. Returns `CollisionBehavior::None` if no trigger collision mask is set for the layer.

Parameters
otherLayerId

The layer ID to query.

Returns

The collision behavior for the specified layer.

Definition at line 346 of file CollisionComponent.ixx.

348 if ((triggerCollisionMask_ & otherLayerId) == 0) {
349 return CollisionBehavior::None;
350 }
351
352 auto resultMask = CollisionBehavior::None;
353 for (int i = 0; i < triggerCollisionBehavior_.size(); i++) {
354 if ((triggerCollisionBehavior_[i] & otherLayerId) != 0) {
355 resultMask = resultMask | static_cast<CollisionBehavior>(1 << i);
356 }
357 }
358
359 return resultMask;
360 }

triggerCollisionMask()

uint32_t helios::engine::modules::physics::collision::components::CollisionComponent::triggerCollisionMask ()
inline nodiscard noexcept

Returns the trigger collision mask.

Returns

Bitmask of layers this entity generates trigger collisions with.

Definition at line 264 of file CollisionComponent.ixx.

264 [[nodiscard]] uint32_t triggerCollisionMask() const noexcept {
265 return triggerCollisionMask_;
266 }

Referenced by CollisionComponent, setTriggerCollisionMask and helios::engine::modules::physics::collision::systems::GridCollisionDetectionSystem::update.

Private Member Attributes

CollisionBehaviorSize

size_t helios::engine::modules::physics::collision::components::CollisionComponent::CollisionBehaviorSize = helios::engine::modules::physics::collision::types::CollisionBehaviorItemSize

hitPolicy_

helios::engine::modules::physics::collision::types::HitPolicy helios::engine::modules::physics::collision::components::CollisionComponent::hitPolicy_ = types::HitPolicy::OneHit

Controls how many collisions are reported per frame.

Defaults to `OneHit`, reporting only the first collision. Set to `All` for multi-target collision detection.

See Also

HitPolicy

Definition at line 110 of file CollisionComponent.ixx.

isCollisionReporter_

bool helios::engine::modules::physics::collision::components::CollisionComponent::isCollisionReporter_ = true

Flag indicating whether this component can report collision events.

Definition at line 74 of file CollisionComponent.ixx.

74 bool isCollisionReporter_ = true;

isEnabled_

bool helios::engine::modules::physics::collision::components::CollisionComponent::isEnabled_ = true

Whether this component is enabled.

Definition at line 115 of file CollisionComponent.ixx.

115 bool isEnabled_ = true;

layerId_

uint32_t helios::engine::modules::physics::collision::components::CollisionComponent::layerId_ {}

The collision layer this component belongs to.

Definition at line 53 of file CollisionComponent.ixx.

53 uint32_t layerId_{};

solidCollisionBehavior_

std::array< uint32_t, helios::engine::modules::physics::collision::types::CollisionBehaviorItemSize > helios::engine::modules::physics::collision::components::CollisionComponent::solidCollisionBehavior_ {}

Per-behavior layer masks for solid collisions.

Each array index corresponds to a CollisionBehavior enum value. The bitmask at each index indicates which layers trigger that behavior for solid collisions.

Definition at line 88 of file CollisionComponent.ixx.

88 > solidCollisionBehavior_{};

solidCollisionMask_

uint32_t helios::engine::modules::physics::collision::components::CollisionComponent::solidCollisionMask_ {}

Bitmask specifying layers that generate solid collisions.

Solid collision should be symmetric and in the calling API treated as such: `(maskB & thisLayerId) != 0 && (thisMask & layerBId) != 0`

Definition at line 69 of file CollisionComponent.ixx.

69 uint32_t solidCollisionMask_{};

triggerCollisionBehavior_

std::array< uint32_t, helios::engine::modules::physics::collision::types::CollisionBehaviorItemSize > helios::engine::modules::physics::collision::components::CollisionComponent::triggerCollisionBehavior_ {}

Per-behavior layer masks for trigger collisions.

Each array index corresponds to a CollisionBehavior enum value. The bitmask at each index indicates which layers trigger that behavior for trigger collisions.

Definition at line 100 of file CollisionComponent.ixx.

100 > triggerCollisionBehavior_{};

triggerCollisionMask_

uint32_t helios::engine::modules::physics::collision::components::CollisionComponent::triggerCollisionMask_ {}

Bitmask specifying layers that generate trigger collisions.

Trigger collision masks may be asymmetric, i.e. a component B must not know about the existence of another layerId.

Definition at line 61 of file CollisionComponent.ixx.

61 uint32_t triggerCollisionMask_{};

The documentation for this class was generated from the following file:


Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.