Vulkan Schnee 0.0.1 (22840dc8)
High-performance rendering engine
Loading...
Searching...
No Matches
Engine::Physics::CollisionProfileRegistry Class Reference

Registers collision profile names, enum mappings, and pair responses. More...

#include <CollisionProfileRegistry.h>

Collaboration diagram for Engine::Physics::CollisionProfileRegistry:

Classes

struct  ProfileData

Public Member Functions

 CollisionProfileRegistry ()
 Creates a registry with an invalid profile slot at index zero.
template<typename ProfileEnum>
void registerProfileEnum (std::string domain, std::initializer_list< std::pair< ProfileEnum, std::string_view > > values)
 Registers enum values as collision profiles under a domain prefix.
template<typename ProfileEnum>
CollisionProfileHandle resolve (ProfileEnum value) const
 Resolves a registered enum value to its collision profile handle.
void registerEngineProfiles ()
 Registers the engine's built-in collision profiles and default responses.
bool loadProfileResponses (const std::string &path)
 Loads profile default and pair responses from a JSON file.
void warnAboutAsymmetricResponses () const
 Logs configured response pairs where only one direction ignores collisions.
CollisionProfileHandle registerProfileName (const std::string &fullName)
 Registers or returns a named collision profile.
CollisionProfileHandle findProfile (const std::string &fullName) const
 Finds a profile by full name.
CollisionProfileHandle getFallbackProfile () const
 Returns the fallback profile used when no valid profile is configured.
CollisionResponse getResponse (CollisionProfileHandle profileA, CollisionProfileHandle profileB) const
 Returns the configured response from one profile to another.
CollisionResponse getResolvedResponse (CollisionProfileHandle profileA, CollisionProfileHandle profileB) const
 Resolves the effective symmetric response for a profile pair.
std::uint16_t getBulletGroup (CollisionProfileHandle profile) const
 Returns the Bullet collision group bit for a profile.
std::uint16_t getBulletMask (CollisionProfileHandle profile) const
 Returns the Bullet collision mask bits for profiles this profile can block.
bool profileCanBlockAny (CollisionProfileHandle profile) const
 Returns whether the profile blocks at least one other profile.
std::vector< CollisionProfileHandle > getProfiles () const
 Returns all valid registered collision profile handles.
const std::string & getProfileName (CollisionProfileHandle profile) const
 Returns the full registered name for a profile handle.

Private Member Functions

ProfileData * findData (CollisionProfileHandle profile)
const ProfileData * findData (CollisionProfileHandle profile) const
void setDefaultResponse (CollisionProfileHandle profile, CollisionResponse response)
void setResponse (CollisionProfileHandle profileA, CollisionProfileHandle profileB, CollisionResponse response)
void logMaskOverflowIfNeeded () const

Private Attributes

std::vector< ProfileData > profiles_
std::unordered_map< std::string, CollisionProfileHandle > profilesByName_
std::unordered_map< std::type_index, std::unordered_map< std::int64_t, CollisionProfileHandle > > enumProfiles_

Detailed Description

Registers collision profile names, enum mappings, and pair responses.

Definition at line 20 of file CollisionProfileRegistry.h.

Constructor & Destructor Documentation

◆ CollisionProfileRegistry()

Engine::Physics::CollisionProfileRegistry::CollisionProfileRegistry ( )

Creates a registry with an invalid profile slot at index zero.

Member Function Documentation

◆ findData() [1/2]

ProfileData * Engine::Physics::CollisionProfileRegistry::findData ( CollisionProfileHandle profile)
nodiscardprivate

◆ findData() [2/2]

const ProfileData * Engine::Physics::CollisionProfileRegistry::findData ( CollisionProfileHandle profile) const
nodiscardprivate

◆ findProfile()

CollisionProfileHandle Engine::Physics::CollisionProfileRegistry::findProfile ( const std::string & fullName) const
nodiscard

Finds a profile by full name.

◆ getBulletGroup()

std::uint16_t Engine::Physics::CollisionProfileRegistry::getBulletGroup ( CollisionProfileHandle profile) const
nodiscard

Returns the Bullet collision group bit for a profile.

◆ getBulletMask()

std::uint16_t Engine::Physics::CollisionProfileRegistry::getBulletMask ( CollisionProfileHandle profile) const
nodiscard

Returns the Bullet collision mask bits for profiles this profile can block.

◆ getFallbackProfile()

CollisionProfileHandle Engine::Physics::CollisionProfileRegistry::getFallbackProfile ( ) const
nodiscard

Returns the fallback profile used when no valid profile is configured.

◆ getProfileName()

const std::string & Engine::Physics::CollisionProfileRegistry::getProfileName ( CollisionProfileHandle profile) const
nodiscard

Returns the full registered name for a profile handle.

◆ getProfiles()

std::vector< CollisionProfileHandle > Engine::Physics::CollisionProfileRegistry::getProfiles ( ) const
nodiscard

Returns all valid registered collision profile handles.

◆ getResolvedResponse()

CollisionResponse Engine::Physics::CollisionProfileRegistry::getResolvedResponse ( CollisionProfileHandle profileA,
CollisionProfileHandle profileB ) const
nodiscard

Resolves the effective symmetric response for a profile pair.

◆ getResponse()

CollisionResponse Engine::Physics::CollisionProfileRegistry::getResponse ( CollisionProfileHandle profileA,
CollisionProfileHandle profileB ) const
nodiscard

Returns the configured response from one profile to another.

◆ loadProfileResponses()

bool Engine::Physics::CollisionProfileRegistry::loadProfileResponses ( const std::string & path)

Loads profile default and pair responses from a JSON file.

◆ logMaskOverflowIfNeeded()

void Engine::Physics::CollisionProfileRegistry::logMaskOverflowIfNeeded ( ) const
private

◆ profileCanBlockAny()

bool Engine::Physics::CollisionProfileRegistry::profileCanBlockAny ( CollisionProfileHandle profile) const
nodiscard

Returns whether the profile blocks at least one other profile.

◆ registerEngineProfiles()

void Engine::Physics::CollisionProfileRegistry::registerEngineProfiles ( )

Registers the engine's built-in collision profiles and default responses.

◆ registerProfileEnum()

template<typename ProfileEnum>
void Engine::Physics::CollisionProfileRegistry::registerProfileEnum ( std::string domain,
std::initializer_list< std::pair< ProfileEnum, std::string_view > > values )
inline

Registers enum values as collision profiles under a domain prefix.

Definition at line 32 of file CollisionProfileRegistry.h.

References enumProfiles_, and registerProfileName().

Here is the call graph for this function:

◆ registerProfileName()

CollisionProfileHandle Engine::Physics::CollisionProfileRegistry::registerProfileName ( const std::string & fullName)
nodiscard

Registers or returns a named collision profile.

Referenced by registerProfileEnum().

Here is the caller graph for this function:

◆ resolve()

template<typename ProfileEnum>
CollisionProfileHandle Engine::Physics::CollisionProfileRegistry::resolve ( ProfileEnum value) const
inlinenodiscard

Resolves a registered enum value to its collision profile handle.

Definition at line 52 of file CollisionProfileRegistry.h.

References enumProfiles_.

◆ setDefaultResponse()

void Engine::Physics::CollisionProfileRegistry::setDefaultResponse ( CollisionProfileHandle profile,
CollisionResponse response )
private

◆ setResponse()

void Engine::Physics::CollisionProfileRegistry::setResponse ( CollisionProfileHandle profileA,
CollisionProfileHandle profileB,
CollisionResponse response )
private

◆ warnAboutAsymmetricResponses()

void Engine::Physics::CollisionProfileRegistry::warnAboutAsymmetricResponses ( ) const

Logs configured response pairs where only one direction ignores collisions.

Member Data Documentation

◆ enumProfiles_

std::unordered_map<std::type_index, std::unordered_map<std::int64_t, CollisionProfileHandle> > Engine::Physics::CollisionProfileRegistry::enumProfiles_
private

Definition at line 153 of file CollisionProfileRegistry.h.

Referenced by registerProfileEnum(), and resolve().

◆ profiles_

std::vector<ProfileData> Engine::Physics::CollisionProfileRegistry::profiles_
private

Definition at line 151 of file CollisionProfileRegistry.h.

◆ profilesByName_

std::unordered_map<std::string, CollisionProfileHandle> Engine::Physics::CollisionProfileRegistry::profilesByName_
private

Definition at line 152 of file CollisionProfileRegistry.h.


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