Apparatus Version 1.23
ECS data-oriented workflow for Unreal Engine.
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
ISubjective Class Reference

An interface for all sorts of subjectives. More...

#include <Subjective.h>

Inheritance diagram for ISubjective:
Inheritance graph
[legend]
Collaboration diagram for ISubjective:
Collaboration graph
[legend]

Public Types

typedef int32 SlotIndexType
 The type of the slot index.
 

Public Member Functions

AMechanismGetMechanism () const
 Get the mechanism this subjective is currently part of (if registered).
 
template<EParadigm Paradigm = EParadigm::Safe>
TOutcome< Paradigm > SetMechanism (AMechanism *const Mechanism)
 Set the mechanism of the subjective.
 
const TArray< FTraitRecord > & GetTraitRecordsRef () const
 Direct access for the internal traits array.
 
virtual const TArray< UDetail * > & GetDetailsRef () const
 Direct access for the internal details array.
 
const FFingerprintGetFingerprint () const
 Get the active fingerprint of the subjective.
 
bool Matches (const FFilter &InFilter) const
 Check if the subjective matches a supplied filter.
 
bool Matches (const FTraitmark &InTraitmark) const
 Check if the subjective matches a supplied traitmark as a filter.
 
bool Matches (const FDetailmark &InDetailmark) const
 Check if the subjective matches a supplied detailmark as a filter.
 
UBeltGetPreferredBelt () const
 Get the preferred belt of the subjective (if any).
 
const struct FBeltSlotGetSlot () const
 Get the current belt slot of the subjective (if any).
 
bool IsRegistered () const
 Check if the subjective is registered within the machine.
 
int32 GetSlotIndex () const
 Get the current slot index of the subjective.
 
bool IsBooted () const
 Check if the subject is booted.
 
FSubjectHandle GetHandle ()
 Get the subject handle of this subjective.
 
FConstSubjectHandle GetHandle () const
 Get the subject handle of this subjective.
 
template<EParadigm Paradigm = EParadigm::DefaultPortable>
TOutcome< Paradigm > Unregister ()
 Unregister the subjective from its mechanism in a manual fashion.
 
virtual uint32 CalcHash () const
 Calculate the hash of the subjective.
 
void ReceiveHandleDespawned ()
 Called when the subject handle is despawned.
 
virtual void NotifyHandleDespawned ()
 Called when the subject handle is despawned.
 
virtual AActor * GetActor () const
 Get an actor corresponding to the subjective (if any).
 
Flagmark
EFlagmark GetFlagmark () const
 Get the current flagmark of the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, EFlagmarkSetFlagmark (const EFlagmark InFlagmark)
 Set the current flagmark for the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, EFlagmarkSetFlagmarkMasked (const EFlagmark InFlagmark, const EFlagmark InMask=FM_AllUserLevel)
 Set the current flagmark for the subjective in a masked fashion.
 
bool HasFlag (const EFlagmarkBit Flag) const
 Get the current state of a flag for the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, boolSetFlag (const EFlagmarkBit Flag, const bool bState=true)
 Set a flag for the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, boolToggleFlag (const EFlagmarkBit Flag)
 Toggle a flag for the subjective.
 
Traits
bool HasTrait (UScriptStruct *const TraitType) const
 Check if the subjective has a certain trait.
 
template<typename T , TTraitTypeSecurity< T > = true>
bool HasTrait () const
 Check if there is a trait of a specific type in the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > SetTrait (UScriptStruct *const TraitType, const void *const TraitData)
 Set a trait of the subjective by its type.
 
template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> SetTrait (const T &Trait)
 Set a trait of the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > GetTrait (UScriptStruct *const TraitType, void *const OutTraitData, const bool bTraitDataInitialized=true) const
 Get a trait from the subjective by its type.
 
template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > GetTrait (T *const OutTrait, const bool bTraitDataInitialized=true) const
 Get a trait from the subjective by its type.
 
template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > GetTrait (T &OutTrait, const bool bTraitDataInitialized=true) const
 Get a trait from the subjective by its type.
 
template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, TGetTrait () const
 Get a copy of a trait from the subjective by its type.
 
template<typename T , EParadigm Paradigm = EParadigm::Default, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, TGetTrait () const
 Get a copy of a trait from the subjective by its type.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcomeIfUnsafe< Paradigm, const void * > GetTraitPtr (UScriptStruct *const TraitType) const
 Get the trait data from the subjective by its type.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcomeIfUnsafe< Paradigm, void * > GetTraitPtr (UScriptStruct *const TraitType)
 Get the trait data from a subjective by its type.
 
template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >() &&IsUnsafe(Paradigm), const T * > GetTraitPtr () const
 Get the trait data from the subjective by its type.
 
template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >() &&IsUnsafe(Paradigm), T * > GetTraitPtr ()
 Get the trait data from the subjective by its type.
 
template<typename T , EParadigm Paradigm = EParadigm::Default>
auto GetTraitPtr () const
 Get the trait data from the subjective by its type.
 
template<typename T , EParadigm Paradigm = EParadigm::Default>
auto GetTraitPtr ()
 Get the trait data from the subjective by its type.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ObtainTrait (UScriptStruct *TraitType, void *const OutTraitData, const bool bTraitDataInitialized=true)
 Obtain a trait from the subjective by its type.
 
template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> ObtainTrait (T *const OutTrait, const bool bTraitDataInitialized=true)
 Obtain a trait from the subjective.
 
template<EParadigm Paradigm = EParadigm::Default, typename T = void, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > ObtainTrait (T &OutTrait, const bool bTraitDataInitialized=true)
 Obtain a trait from the subjective.
 
template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, TObtainTrait ()
 Get a copy of an obtained trait from the subjective.
 
template<typename T , EParadigm Paradigm = EParadigm::Default, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, TObtainTrait ()
 Get a copy of an obtained trait from the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > RemoveTrait (UScriptStruct *const TraitType)
 Remove a trait from the subjective.
 
template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > RemoveTrait ()
 Remove a trait from the subjective.
 
template<typename T , EParadigm Paradigm = EParadigm::Default, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > RemoveTrait ()
 Remove a trait from the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > RemoveAllTraits ()
 Remove all of the traits from the subjective.
 
Details
void GetDetails (const bool bIncludeDisabled, TArray< UDetail * > &OutDetails) const
 Get all of the details of the subjective.
 
void GetDetails (TArray< UDetail * > &OutDetails, const bool bIncludeDisabled=false) const
 Get all the enabled details of the subjective.
 
UDetailFindDetail (TSubclassOf< UDetail > DetailClass, const bool bIncludeDisabled=false) const
 
template<class D >
std::enable_if< IsDetailClass< D >(), D * >::type FindDetail (const bool bIncludeDisabled=false) const
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, UDetail * > GetDetail (TSubclassOf< UDetail > DetailClass, const bool bIncludeDisabled=false) const
 Get a detail by its class.
 
template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > GetDetail (const bool bIncludeDisabled=false) const
 Get a detail by its class.
 
template<class D , EParadigm Paradigm = EParadigm::Default>
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > GetDetail (const bool bIncludeDisabled=false) const
 Get a detail by its class.
 
template<EParadigm Paradigm = EParadigm::Default, typename AllocatorT = FDefaultAllocator>
TOutcome< Paradigm > CollectDetails (TSubclassOf< UDetail > DetailClass, TArray< UDetail *, AllocatorT > &OutDetails, const bool bIncludeDisabled=false) const
 Collect all of the details of a certain class.
 
template<EParadigm Paradigm = EParadigm::Default, typename AllocatorT = FDefaultAllocator>
TOutcome< Paradigm > GetDetails (TSubclassOf< UDetail > DetailClass, TArray< UDetail *, AllocatorT > &OutDetails, const bool bIncludeDisabled=false) const
 Get all of the details of a certain class.
 
template<class D , typename AllocatorT >
std::enable_if< IsDetailClass< D >(), void >::type GetDetails (TArray< D *, AllocatorT > &OutDetails, const bool bIncludeDisabled=false) const
 Get all of the details of a certain class.
 
void FindDetails (TSubclassOf< UDetail > DetailClass, TArray< UDetail * > &OutDetails, const bool bIncludeDisabled=false) const
 
bool HasDetail (TSubclassOf< UDetail > DetailClass, const bool bIncludeDisabled=false) const
 Check if there is a detail of a specific class in the subjective.
 
template<class D >
std::enable_if< IsDetailClass< D >(), bool >::type HasDetail (const bool bIncludeDisabled=false) const
 Check if there is a detail of a specific class in the subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, UDetail * > EnableDetail (const TSubclassOf< UDetail > DetailClass)
 Enable a detail of a certain type.
 
template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > EnableDetail ()
 Enable a detail of a certain type.
 
template<class D , EParadigm Paradigm = EParadigm::Default>
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > EnableDetail ()
 Enable a detail of a certain type.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, UDetail * > AddDetail (const TSubclassOf< UDetail > DetailClass, const bool bReuseDisabled=false)
 Add a new active detail or reuse an inactive one.
 
template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > AddDetail (const bool bReuseDisabled=false)
 Add a new active detail or reuse an inactive one.
 
template<class D , EParadigm Paradigm = EParadigm::Default>
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > AddDetail (const bool bReuseDisabled=false)
 Add a new active detail or reuse an inactive one.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > DisableDetail (const TSubclassOf< UDetail > DetailClass, const bool bDisableMultiple=false)
 Disable detail(s) by class.
 
template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >()> DisableDetail (const bool bDisableMultiple=false)
 Disable detail(s) by class.
 
template<class D >
auto DisableDetail (const bool bDisableMultiple=false)
 Disable detail(s) by class.
 
Networking
virtual bool IsNetworkCapable () const
 Check if the subjective class is capable of networking.
 
uint32 GetNetworkId () const
 Get the unique cross-peer network identifier of the subjective (if any).
 
bool IsServerSide () const
 Check if the subjective is a server-side one.
 
bool IsClientSide () const
 Check if the subjective is a client-side one.
 
UNetConnection * GetConnectionPermit () const
 Get the server-side connection to a client from which it is allowed to push traits to this subjective.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > SetConnectionPermit (UNetConnection *const Connection)
 Set the server-side connection to a client from which it is allowed to push traits to this subjective.
 
const FTraitmarkGetTraitmarkPermit () const
 Get the server-side list of traits allowed to be received from clients.
 
const FTraitmarkGetTraitmarkPass () const
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > SetTraitmarkPermit (const FTraitmark &InTraitmarkPermit)
 Set the server-side list of traits allowed to be received from clients.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > SetTraitmarkPass (const FTraitmark &InTraitmarkPermit)
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > PushTrait (UScriptStruct *const TraitType, const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true) const
 Send an existing trait to a remote peer.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > PushTrait (UScriptStruct *const TraitType, const void *const TraitData, const bool bSetForLocal, const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true)
 Send an additional trait to a remote peer.
 
template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > PushTrait (UScriptStruct *const TraitType, const void *const TraitData, const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true)
 Send an additional trait to a remote peer.
 
template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> PushTrait (const T &Trait, const bool bSetForLocal=false, const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true)
 Send an extra trait to a remote peer.
 
template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> PushTrait (const T &Trait, const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true)
 Send an extra trait to a remote peer.
 
template<EParadigm Paradigm, typename T >
TOutcomeIf< Paradigm, IsTraitType< T >()> PushTrait (const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true)
 Send an extra trait to a remote peer.
 
template<typename T , EParadigm Paradigm = EParadigm::Default>
auto PushTrait (const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true)
 Send an extra trait to a remote peer.
 

Static Public Member Functions

static bool IsValidSubjective (const ISubjective *const InSubjective)
 

Static Public Attributes

static constexpr SlotIndexType InvalidSlotIndex = -1
 Invalid belt slot index.
 

Protected Member Functions

bool MarkBooted ()
 Set the subjective as booted.
 
void TakeBeltSlot (UBelt *const InBelt, const int32 InSlotIndex)
 Set or reset the current belt slot of the subjective.
 
virtual FStandardSubjectivePropertyBlockDoGetStandardPropertyBlock ()
 
virtual FStandardSubjectivePropertyBlockDoGetStandardPropertyBlock () const
 
FStandardSubjectivePropertyBlockGetStandardPropertyBlock ()
 
const FStandardSubjectivePropertyBlockGetStandardPropertyBlock () const
 
virtual FStandardSubjectiveNetworkPropertyBlockDoGetStandardNetworkPropertyBlock ()
 
virtual FStandardSubjectiveNetworkPropertyBlockDoGetStandardNetworkPropertyBlock () const
 
FStandardSubjectiveNetworkPropertyBlockGetStandardNetworkPropertyBlock ()
 
const FStandardSubjectiveNetworkPropertyBlockGetStandardNetworkPropertyBlock () const
 
const EFlagmarkGetFlagmarkPropRef () const
 Get the internal flagmark property reference.
 
EFlagmarkGetFlagmarkPropRef ()
 Get the internal flagmark property reference.
 
auto & GetMechanismOverridePropRef () const
 Get the mechanism override property of the subjective.
 
auto & GetMechanismOverridePropRef ()
 Get the mechanism override property of the subjective.
 
TArray< FTraitRecord > & GetTraitRecordsRef ()
 Direct access for the internal traits array.
 
TArray< UDetail * > & GetDetailsRef ()
 Direct access for the internal details array.
 
void TakeBeltSlot (TYPE_OF_NULLPTR)
 Reset the belt slot.
 
void ClientReceiveNetworkId_Implementation (const uint32 NetworkId)
 Assign a unique network identifier to the subject of the subjective.
 
void ServerRequestNetworkId_Implementation ()
 Request a unique network identifier for the subject of the subjective.
 
void PeerReceiveTrait_Implementation (EPeerRole PeerRole, UScriptStruct *const TraitType, const TArray< uint8 > &TraitData)
 Receive a trait on the server or the client.
 
bool PeerReceiveTrait_Validate (EPeerRole PeerRole, UScriptStruct *const TraitType, const TArray< uint8 > &TraitData)
 Validate receiving a trait on the server or the client.
 
virtual TPortableOutcome DoPushTrait (const EParadigm Paradigm, UScriptStruct *const TraitType, const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true) const
 
virtual TPortableOutcome DoPushTrait (const EParadigm Paradigm, UScriptStruct *const TraitType, const void *const TraitData, const bool bSetForLocal=false, const EPeerRole PeerRole=EPeerRole::Auto, const bool bReliable=true)
 
virtual void AssignNetworkIdOnClient (const uint32 NetworkId)
 Assign a network identifier on a client.
 
virtual void ObtainNetworkIdFromServer ()
 Obtain a networking subject identifier from the server.
 
void TakeBeltSlot (const int32 InSlotIndex)
 Change the current slot of the subjective, while preserving the belt.
 
UBeltGetBelt () const
 Get the active belt of the subjective (if any).
 
FFingerprintGetFingerprintRef ()
 Get the internal fingerprint of the subjective.
 
const FFingerprintGetFingerprintRef () const
 Get the internal fingerprint of the subjective.
 
struct FBeltSlotGetSlotPtr ()
 Get the current belt slot of the subjective (if any).
 
void DoRegister ()
 Perform an actual registration of the subjective.
 
template<EParadigm Paradigm = EParadigm::DefaultInternal>
TOutcome< Paradigm > DoUnregister ()
 Perform an actual de-registration procedure on the subjective.
 
void DoStartSerialization (FArchive &Archive)
 Begin the serialization routine.
 
void DoFinishSerialization (FArchive &Archive)
 End the serialization routine.
 
bool DoesHaveTraitRecord (UScriptStruct *const TraitType) const
 
FTraitmark DoGetTraitRecordsTraitmark () const
 Get the traitmark based on the existing trait records.
 
const FTraitRecord * DoFindTraitRecord (UScriptStruct *const TraitType) const
 
EApparatusStatus DoGetTraitRecord (UScriptStruct *const TraitType, void *const OutTraitData, const bool bTraitDataInitialized=true) const
 
template<typename T >
EApparatusStatus DoGetTraitRecord (T *const OutTraitData, const bool bTraitDataInitialized=true) const
 
template<typename T >
EApparatusStatus DoGetTraitRecord (T &OutTraitData, const bool bTraitDataInitialized=true) const
 
EApparatusStatus DoSetTraitRecord (UScriptStruct *TraitType, const void *TraitData)
 
template<typename T >
EApparatusStatus DoSetTraitRecord (const T &InTrait)
 
template<typename T >
EApparatusStatus DoSetTraitRecord (const T *const InTrait)
 
const FTraitRecord & DoObtainTraitRecord (UScriptStruct *const TraitType)
 
EApparatusStatus DoObtainTraitRecord (UScriptStruct *const TraitType, void *const OutTraitData, const bool bTraitDataInitialized=true)
 
EApparatusStatus DoRemoveTraitRecord (UScriptStruct *const TraitType)
 
EApparatusStatus DoRemoveAllTraitRecords ()
 
virtual bool ShouldBeReplicated () const
 Check if the entity be replicated.
 

Static Protected Member Functions

template<EParadigm Paradigm = EParadigm::DefaultInternal, class S = void>
static TOutcome< Paradigm > DoPushTrait (const S *const Subjective, UScriptStruct *const TraitType, EPeerRole PeerRole, const bool bReliable, void(S::*ServerReceiveTraitRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData), void(S::*ClientReceiveTraitRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData), void(S::*ServerReceiveTraitUnreliableRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData), void(S::*ClientReceiveTraitUnreliableRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData))
 Push a trait to the remote version of the subject.
 
template<EParadigm Paradigm = EParadigm::DefaultInternal, class S = void>
static TOutcome< Paradigm > DoPushTrait (S *const Subjective, UScriptStruct *const TraitType, const void *const TraitData, bool bSetForLocal, EPeerRole PeerRole, const bool bReliable, void(S::*ServerReceiveTraitRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData), void(S::*ClientReceiveTraitRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData), void(S::*ServerReceiveTraitUnreliableRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData), void(S::*ClientReceiveTraitUnreliableRPC)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData))
 Push a trait to the remote version of the subject.
 

Protected Attributes

UBeltBelt = nullptr
 A reference to a current subjective's belt (if any).
 
SlotIndexType SlotIndex = InvalidSlotIndex
 The index of the belt slot, this subject currently resides in.
 
FSubjectHandle Handle
 The subject handle which points to a global subjects registry.
 
bool bUnregistered = false
 Was the subjective already unregistered via the normal DoUnregister() means.
 
FStandardSubjectivePropertyBlockStandardPropertyBlockCache = nullptr
 
FStandardSubjectiveNetworkPropertyBlockStandardNetworkPropertyBlockCache = nullptr
 

Friends

struct FFingerprint
 
struct FBeltSlot
 
struct FBeltSlotCache
 
struct FSubjectInfo
 
class UDetail
 
class UBelt
 
class AMechanism
 
class UMachine
 
class UApparatusFunctionLibrary
 
class ISolidSubjective
 

Detailed Description

An interface for all sorts of subjectives.

All of the subjectives are essentially subjects design-wise and inherit all of their functionality internally.

Note
The current semantic for the constant subjectives is basically being solid in terms of iterating on them.

Member Typedef Documentation

◆ SlotIndexType

The type of the slot index.

Member Function Documentation

◆ AddDetail() [1/3]

template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > ISubjective::AddDetail ( const bool  bReuseDisabled = false)
inline

Add a new active detail or reuse an inactive one.

Statically typed paradigm version.

Template Parameters
ParadigmThe paradigm to work under.
DThe class of the detail to add. Must be UDetail based.
Parameters
bReuseDisabledShould disabled details be reused instead of adding a new one?
Returns
The newly added detail.

◆ AddDetail() [2/3]

template<class D , EParadigm Paradigm = EParadigm::Default>
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > ISubjective::AddDetail ( const bool  bReuseDisabled = false)
inline

Add a new active detail or reuse an inactive one.

Statically typed version.

Template Parameters
DThe class of the detail to add. Must be UDetail based.
ParadigmThe paradigm to work under.
Parameters
bReuseDisabledShould disabled details be reused instead of adding a new one?
Returns
The newly added detail.

◆ AddDetail() [3/3]

template<EParadigm Paradigm>
TOutcome< Paradigm, UDetail * > ISubjective::AddDetail ( const TSubclassOf< UDetail DetailClass,
const bool  bReuseDisabled = false 
)
inline

Add a new active detail or reuse an inactive one.

Dynamically typed version.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
DetailClassThe class of the detail to add.
bReuseDisabledShould disabled details be reused instead of adding a new one?
Returns
The newly added detail.

◆ AssignNetworkIdOnClient()

virtual void ISubjective::AssignNetworkIdOnClient ( const uint32  NetworkId)
inlineprotectedvirtual

Assign a network identifier on a client.

Should be implemented via a client RPC.

Reimplemented in ASubjectiveActor, and USubjectiveActorComponent.

◆ CalcHash()

virtual uint32 ISubjective::CalcHash ( ) const
inlinevirtual

Calculate the hash of the subjective.

Reimplemented in ISolidSubjective.

◆ ClientReceiveNetworkId_Implementation()

void ISubjective::ClientReceiveNetworkId_Implementation ( const uint32  NetworkId)
protected

Assign a unique network identifier to the subject of the subjective.

The standard implementation for the RPC.

◆ CollectDetails()

template<EParadigm Paradigm = EParadigm::Default, typename AllocatorT = FDefaultAllocator>
TOutcome< Paradigm > ISubjective::CollectDetails ( TSubclassOf< UDetail DetailClass,
TArray< UDetail *, AllocatorT > &  OutDetails,
const bool  bIncludeDisabled = false 
) const
inline

Collect all of the details of a certain class.

Dynamically-typed version.

Supports searching by a base class.

Template Parameters
ParadigmThe paradigm to work under.
AllocatorTThe type of the allocator to feature in the array.
Parameters
[in]DetailClassThe class of the details to collect.
[out]OutDetailsThe output array to store the details in.
[in]bIncludeDisabledShould disabled details be collected.

◆ DisableDetail() [1/3]

template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >()> ISubjective::DisableDetail ( const bool  bDisableMultiple = false)
inline

Disable detail(s) by class.

Statically typed paradigm version.

Details can't be removed from subjectives. They can only be disabled.

Template Parameters
ParadigmThe paradigm to work under.
DThe class of the detail to disable. Must be UDetail subclass.
Parameters
bDisableMultipleShould all matching details be disabled instead of first one?
Returns
The outcome of the operation.
EApparatusStatus::Noop If there are no such details in the subjective currently enabled.

◆ DisableDetail() [2/3]

template<class D >
auto ISubjective::DisableDetail ( const bool  bDisableMultiple = false)
inline

Disable detail(s) by class.

Statically typed version.

Details can't be removed from subjectives. They can only be disabled.

Template Parameters
DThe class of the detail to disable. Must be UDetail subclass.
Parameters
bDisableMultipleShould all matching details be disabled instead of first one?
Returns
The outcome of the operation.
EApparatusStatus::Noop If there are no such details in the subjective currently enabled.

◆ DisableDetail() [3/3]

template<EParadigm Paradigm>
TOutcome< Paradigm > ISubjective::DisableDetail ( const TSubclassOf< UDetail DetailClass,
const bool  bDisableMultiple = false 
)

Disable detail(s) by class.

Dynamically typed version.

Details can't be removed from subjectives. They can only be disabled.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
DetailClassThe class of the detail(s) to disable.
bDisableMultipleShould all matching details be disabled instead of first one?
Returns
The outcome of the operation.
EApparatusStatus::Noop If there are no such details in the subjective currently enabled.

◆ DoesHaveTraitRecord()

bool ISubjective::DoesHaveTraitRecord ( UScriptStruct *const  TraitType) const
inlineprotected

◆ DoFindTraitRecord()

const FTraitRecord * ISubjective::DoFindTraitRecord ( UScriptStruct *const  TraitType) const
inlineprotected

◆ DoFinishSerialization()

void ISubjective::DoFinishSerialization ( FArchive &  Archive)
protected

End the serialization routine.

◆ DoGetStandardNetworkPropertyBlock() [1/2]

virtual FStandardSubjectiveNetworkPropertyBlock * ISubjective::DoGetStandardNetworkPropertyBlock ( )
inlineprotectedvirtual

◆ DoGetStandardNetworkPropertyBlock() [2/2]

virtual FStandardSubjectiveNetworkPropertyBlock * ISubjective::DoGetStandardNetworkPropertyBlock ( ) const
inlineprotectedvirtual

◆ DoGetStandardPropertyBlock() [1/2]

virtual FStandardSubjectivePropertyBlock * ISubjective::DoGetStandardPropertyBlock ( )
inlineprotectedvirtual

◆ DoGetStandardPropertyBlock() [2/2]

virtual FStandardSubjectivePropertyBlock * ISubjective::DoGetStandardPropertyBlock ( ) const
inlineprotectedvirtual

◆ DoGetTraitRecord() [1/3]

template<typename T >
EApparatusStatus ISubjective::DoGetTraitRecord ( T OutTraitData,
const bool  bTraitDataInitialized = true 
) const
inlineprotected

◆ DoGetTraitRecord() [2/3]

template<typename T >
EApparatusStatus ISubjective::DoGetTraitRecord ( T *const  OutTraitData,
const bool  bTraitDataInitialized = true 
) const
inlineprotected

◆ DoGetTraitRecord() [3/3]

EApparatusStatus ISubjective::DoGetTraitRecord ( UScriptStruct *const  TraitType,
void *const  OutTraitData,
const bool  bTraitDataInitialized = true 
) const
inlineprotected

◆ DoGetTraitRecordsTraitmark()

FTraitmark ISubjective::DoGetTraitRecordsTraitmark ( ) const
inlineprotected

Get the traitmark based on the existing trait records.

◆ DoObtainTraitRecord() [1/2]

const FTraitRecord & ISubjective::DoObtainTraitRecord ( UScriptStruct *const  TraitType)
inlineprotected

◆ DoObtainTraitRecord() [2/2]

EApparatusStatus ISubjective::DoObtainTraitRecord ( UScriptStruct *const  TraitType,
void *const  OutTraitData,
const bool  bTraitDataInitialized = true 
)
inlineprotected

◆ DoPushTrait() [1/4]

virtual TPortableOutcome ISubjective::DoPushTrait ( const EParadigm  Paradigm,
UScriptStruct *const  TraitType,
const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
) const
inlineprotectedvirtual

◆ DoPushTrait() [2/4]

virtual TPortableOutcome ISubjective::DoPushTrait ( const EParadigm  Paradigm,
UScriptStruct *const  TraitType,
const void *const  TraitData,
const bool  bSetForLocal = false,
const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
)
inlineprotectedvirtual

◆ DoPushTrait() [3/4]

template<EParadigm Paradigm = EParadigm::DefaultInternal, class S = void>
static TOutcome< Paradigm > ISubjective::DoPushTrait ( const S *const  Subjective,
UScriptStruct *const  TraitType,
EPeerRole  PeerRole,
const bool  bReliable,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ServerReceiveTraitRPC,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ClientReceiveTraitRPC,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ServerReceiveTraitUnreliableRPC,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ClientReceiveTraitUnreliableRPC 
)
staticprotected

Push a trait to the remote version of the subject.

Standard implementation.

Template Parameters
ParadigmThe paradigm to work under.
SThe type of the subjective to issue from.
Parameters
SubjectiveThe subjective to use.
TraitTypeThe type of the trait to push.
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for transaction.
ServerReceiveTraitRPCThe RPC to receive the trait on a server.
ClientReceiveTraitRPCThe RPC to receive the trait on a client.
ServerReceiveTraitUnreliableRPCThe RPC to receive the trait on a server unreliably.
ClientReceiveTraitUnreliableRPCThe RPC to receive the trait on a client unreliably.
Returns
The outcome of the operation.

◆ DoPushTrait() [4/4]

template<EParadigm Paradigm = EParadigm::DefaultInternal, class S = void>
static TOutcome< Paradigm > ISubjective::DoPushTrait ( S *const  Subjective,
UScriptStruct *const  TraitType,
const void *const  TraitData,
bool  bSetForLocal,
EPeerRole  PeerRole,
const bool  bReliable,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ServerReceiveTraitRPC,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ClientReceiveTraitRPC,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ServerReceiveTraitUnreliableRPC,
void(S::*)(UScriptStruct *TraitType, const TArray< uint8 > &TraitData)  ClientReceiveTraitUnreliableRPC 
)
staticprotected

Push a trait to the remote version of the subject.

Standard implementation.

Template Parameters
ParadigmThe paradigm to work under.
SThe type of the subjective to issue from.
Parameters
SubjectiveThe subjective to use.
TraitTypeThe type of the trait to push.
TraitDataThe trait data to push.
bSetForLocalShould the trait also be set for the local version of the subject.
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for transaction.
ServerReceiveTraitRPCThe RPC to receive the trait on a server.
ClientReceiveTraitRPCThe RPC to receive the trait on a client.
ServerReceiveTraitUnreliableRPCThe RPC to receive the trait on a server unreliably.
ClientReceiveTraitUnreliableRPCThe RPC to receive the trait on a client unreliably.
Returns
The outcome of the operation.

◆ DoRegister()

void ISubjective::DoRegister ( )
protected

Perform an actual registration of the subjective.

Calls the UMechanism::RegisterSubjective() method in turn.

◆ DoRemoveAllTraitRecords()

EApparatusStatus ISubjective::DoRemoveAllTraitRecords ( )
inlineprotected

◆ DoRemoveTraitRecord()

EApparatusStatus ISubjective::DoRemoveTraitRecord ( UScriptStruct *const  TraitType)
inlineprotected

◆ DoSetTraitRecord() [1/3]

template<typename T >
EApparatusStatus ISubjective::DoSetTraitRecord ( const T InTrait)
inlineprotected

◆ DoSetTraitRecord() [2/3]

template<typename T >
EApparatusStatus ISubjective::DoSetTraitRecord ( const T *const  InTrait)
inlineprotected

◆ DoSetTraitRecord() [3/3]

EApparatusStatus ISubjective::DoSetTraitRecord ( UScriptStruct *  TraitType,
const void *  TraitData 
)
inlineprotected

◆ DoStartSerialization()

void ISubjective::DoStartSerialization ( FArchive &  Archive)
protected

Begin the serialization routine.

◆ DoUnregister()

template<EParadigm Paradigm = EParadigm::DefaultInternal>
TOutcome< Paradigm > ISubjective::DoUnregister ( )
protected

Perform an actual de-registration procedure on the subjective.

◆ EnableDetail() [1/3]

template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > ISubjective::EnableDetail ( )
inline

Enable a detail of a certain type.

Statically typed paradigm version.

Adds the detail if there is none of the class already, or reuses an inactive one, enabling it.

Template Parameters
ParadigmThe paradigm to work under.
DThe class of the detail to enable.
Returns
The enabled detail.

◆ EnableDetail() [2/3]

template<class D , EParadigm Paradigm = EParadigm::Default>
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > ISubjective::EnableDetail ( )
inline

Enable a detail of a certain type.

Statically typed version.

Adds the detail if there is none of the class already, or reuses an inactive one, enabling it.

Template Parameters
DThe class of the detail to enable.
ParadigmThe paradigm to work under.
Returns
The enabled detail.

◆ EnableDetail() [3/3]

template<EParadigm Paradigm>
TOutcome< Paradigm, UDetail * > ISubjective::EnableDetail ( const TSubclassOf< UDetail DetailClass)
inline

Enable a detail of a certain type.

Adds the detail if there is none of the class already, or reuses an inactive one, enabling it.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
DetailClassA class of detail to enable.
Returns
The enabled detail.

◆ FindDetail() [1/2]

template<class D >
std::enable_if< IsDetailClass< D >(), D * >::type ISubjective::FindDetail ( const bool  bIncludeDisabled = false) const
inline
Deprecated:
Find a detail by its class. Templated version.

Supports searching by a base class.

Template Parameters
DThe class of the detail to search for.
Parameters
bIncludeDisabledShould disabled details be included?
Returns
A detail of the specified class if found, nullptr otherwise.

◆ FindDetail() [2/2]

UDetail * ISubjective::FindDetail ( TSubclassOf< UDetail DetailClass,
const bool  bIncludeDisabled = false 
) const
inline
Deprecated:
Find a detail by its class.

Supports searching by a base class.

Parameters
DetailClassThe class of the detail to search for.
bIncludeDisabledShould disabled details be included?
Returns
A detail of the specified class if found, nullptr otherwise.

◆ FindDetails()

void ISubjective::FindDetails ( TSubclassOf< UDetail DetailClass,
TArray< UDetail * > &  OutDetails,
const bool  bIncludeDisabled = false 
) const
inline
Deprecated:
Find the details by their class.

Supports searching by a base class.

◆ GetActor()

virtual AActor * ISubjective::GetActor ( ) const
inlinevirtual

Get an actor corresponding to the subjective (if any).

Must be overridden in the descendants if they can derive an actor from itselves.

The default implementation just returns nullptr.

Returns
An actor this subjective belongs to.
nullptr if the subject doesn't belong to any actor.

Reimplemented in ISolidSubjective, ASubjectiveActor, and USubjectiveActorComponent.

◆ GetBelt()

UBelt * ISubjective::GetBelt ( ) const
inlineprotected

Get the active belt of the subjective (if any).

◆ GetConnectionPermit()

UNetConnection * ISubjective::GetConnectionPermit ( ) const
inline

Get the server-side connection to a client from which it is allowed to push traits to this subjective.

Returns
The active connection permit.

◆ GetDetail() [1/3]

template<EParadigm Paradigm, class D >
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > ISubjective::GetDetail ( const bool  bIncludeDisabled = false) const
inline

Get a detail by its class.

Statically typed version.

Supports searching by a base class.

Template Parameters
ParadigmThe paradigm to work under.
DThe type of the detail to get.
Parameters
bIncludeDisabledShould disabled details be included?
Returns
A detail of the specified type.
nullptr If there is no such detail in the subjective.

◆ GetDetail() [2/3]

template<class D , EParadigm Paradigm = EParadigm::Default>
TOutcomeIf< Paradigm, IsDetailClass< D >(), D * > ISubjective::GetDetail ( const bool  bIncludeDisabled = false) const
inline

Get a detail by its class.

Statically typed version.

Supports searching by a base class.

Template Parameters
DThe type of the detail to get.
ParadigmThe paradigm to work under.
Parameters
bIncludeDisabledShould disabled details be included?
Returns
A detail of the specified type.
nullptr If there is no such detail in the subjective.

◆ GetDetail() [3/3]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, UDetail * > ISubjective::GetDetail ( TSubclassOf< UDetail DetailClass,
const bool  bIncludeDisabled = false 
) const
inline

Get a detail by its class.

Supports searching by a base class.

Parameters
DetailClassThe class of the detail to search for.
bIncludeDisabledShould disabled details be considered?
Returns
A detail of the specified class.
nullptr If there is no such detail within the subjective.

◆ GetDetails() [1/4]

void ISubjective::GetDetails ( const bool  bIncludeDisabled,
TArray< UDetail * > &  OutDetails 
) const
inline

Get all of the details of the subjective.

Parameters
bIncludeDisabledShould disabled details be included?
OutDetailsAn array to store the details in.

◆ GetDetails() [2/4]

template<class D , typename AllocatorT >
std::enable_if< IsDetailClass< D >(), void >::type ISubjective::GetDetails ( TArray< D *, AllocatorT > &  OutDetails,
const bool  bIncludeDisabled = false 
) const
inline

Get all of the details of a certain class.

Statically typed version.

Supports searching by a base class.

Template Parameters
DThe class of the details to collect.
AllocatorTThe type of the allocator to utilize within the details.
Parameters
[out]OutDetailsThe output array to store the details in.
[in]bIncludeDisabledShould disabled details be collected.

◆ GetDetails() [3/4]

void ISubjective::GetDetails ( TArray< UDetail * > &  OutDetails,
const bool  bIncludeDisabled = false 
) const
inline

Get all the enabled details of the subjective.

Parameters
OutDetailsAn array to store the details in.
bIncludeDisabledShould disabled details be included?

◆ GetDetails() [4/4]

template<EParadigm Paradigm = EParadigm::Default, typename AllocatorT = FDefaultAllocator>
TOutcome< Paradigm > ISubjective::GetDetails ( TSubclassOf< UDetail DetailClass,
TArray< UDetail *, AllocatorT > &  OutDetails,
const bool  bIncludeDisabled = false 
) const
inline

Get all of the details of a certain class.

Dynamically-typed version.

Supports searching by a base class.

Template Parameters
ParadigmThe paradigm to work under.
AllocatorTThe type of the allocator to feature in the array.
Parameters
[in]DetailClassThe class of the details to collect.
[out]OutDetailsThe output array to store the details in.
[in]bIncludeDisabledShould disabled details be collected.

◆ GetDetailsRef() [1/2]

TArray< UDetail * > & ISubjective::GetDetailsRef ( )
inlineprotected

Direct access for the internal details array.

◆ GetDetailsRef() [2/2]

virtual const TArray< UDetail * > & ISubjective::GetDetailsRef ( ) const
inlinevirtual

Direct access for the internal details array.

Constant version.

◆ GetFingerprint()

const FFingerprint & ISubjective::GetFingerprint ( ) const
inline

Get the active fingerprint of the subjective.

Constant version.

◆ GetFingerprintRef() [1/2]

FFingerprint & ISubjective::GetFingerprintRef ( )
inlineprotected

Get the internal fingerprint of the subjective.

◆ GetFingerprintRef() [2/2]

const FFingerprint & ISubjective::GetFingerprintRef ( ) const
inlineprotected

Get the internal fingerprint of the subjective.

Constant version.

◆ GetFlagmark()

EFlagmark ISubjective::GetFlagmark ( ) const
inline

Get the current flagmark of the subjective.

Returns
The current flagmark of the subjective.

◆ GetFlagmarkPropRef() [1/2]

EFlagmark & ISubjective::GetFlagmarkPropRef ( )
inlineprotected

Get the internal flagmark property reference.

◆ GetFlagmarkPropRef() [2/2]

const EFlagmark & ISubjective::GetFlagmarkPropRef ( ) const
inlineprotected

Get the internal flagmark property reference.

Constant version.

◆ GetHandle() [1/2]

FSubjectHandle ISubjective::GetHandle ( )
inline

Get the subject handle of this subjective.

◆ GetHandle() [2/2]

FConstSubjectHandle ISubjective::GetHandle ( ) const
inline

Get the subject handle of this subjective.

Constant version.

◆ GetMechanism()

AMechanism * ISubjective::GetMechanism ( ) const
inline

Get the mechanism this subjective is currently part of (if registered).

◆ GetMechanismOverridePropRef() [1/2]

auto & ISubjective::GetMechanismOverridePropRef ( )
inlineprotected

Get the mechanism override property of the subjective.

◆ GetMechanismOverridePropRef() [2/2]

auto & ISubjective::GetMechanismOverridePropRef ( ) const
inlineprotected

Get the mechanism override property of the subjective.

Constant version.

◆ GetNetworkId()

uint32 ISubjective::GetNetworkId ( ) const
inline

Get the unique cross-peer network identifier of the subjective (if any).

◆ GetPreferredBelt()

UBelt * ISubjective::GetPreferredBelt ( ) const
inline

Get the preferred belt of the subjective (if any).

◆ GetSlot()

const struct FBeltSlot * ISubjective::GetSlot ( ) const
inline

Get the current belt slot of the subjective (if any).

Constant version.

Returns
The active belt slot of the subject or nullptr, if the subject is not (yet) part of any belt.

◆ GetSlotIndex()

int32 ISubjective::GetSlotIndex ( ) const
inline

Get the current slot index of the subjective.

◆ GetSlotPtr()

struct FBeltSlot * ISubjective::GetSlotPtr ( )
inlineprotected

Get the current belt slot of the subjective (if any).

Returns
The active belt slot of the subject or nullptr, if the subject is not (yet) part of any belt.

◆ GetStandardNetworkPropertyBlock() [1/2]

FStandardSubjectiveNetworkPropertyBlock & ISubjective::GetStandardNetworkPropertyBlock ( )
inlineprotected

◆ GetStandardNetworkPropertyBlock() [2/2]

const FStandardSubjectiveNetworkPropertyBlock & ISubjective::GetStandardNetworkPropertyBlock ( ) const
inlineprotected

◆ GetStandardPropertyBlock() [1/2]

FStandardSubjectivePropertyBlock & ISubjective::GetStandardPropertyBlock ( )
inlineprotected

◆ GetStandardPropertyBlock() [2/2]

const FStandardSubjectivePropertyBlock & ISubjective::GetStandardPropertyBlock ( ) const
inlineprotected

◆ GetTrait() [1/5]

template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, T > ISubjective::GetTrait ( ) const
inline

Get a copy of a trait from the subjective by its type.

Statically typed version.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to get.
Returns
The copy of the trait.

◆ GetTrait() [2/5]

template<typename T , EParadigm Paradigm = EParadigm::Default, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, T > ISubjective::GetTrait ( ) const
inline

Get a copy of a trait from the subjective by its type.

Statically typed version.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to get.
Returns
The copy of the trait.

◆ GetTrait() [3/5]

template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > ISubjective::GetTrait ( T OutTrait,
const bool  bTraitDataInitialized = true 
) const
inline

Get a trait from the subjective by its type.

Statically typed reference version.

If the trait is missing within the subject, the output data is unchanged and EApparatusStatus::Missing is returned.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to get.
Parameters
[out]OutTraitThe trait receiver.
[in]bTraitDataInitializedIs the OutTrait actually initialized?
Returns
The outcome of the operation.
EApparatusStatus::Missing If there is no such trait in the subject.

◆ GetTrait() [4/5]

template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > ISubjective::GetTrait ( T *const  OutTrait,
const bool  bTraitDataInitialized = true 
) const
inline

Get a trait from the subjective by its type.

Statically typed pointer version.

If the trait is missing within the subject, the output data is unchanged and EApparatusStatus::Missing is returned.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to get.
Parameters
[out]OutTraitThe trait data receiver.
[in]bTraitDataInitializedIs the OutTrait actually initialized?
Returns
The outcome of the operation.
EApparatusStatus::Missing If there is no such trait in the subject.

◆ GetTrait() [5/5]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::GetTrait ( UScriptStruct *const  TraitType,
void *const  OutTraitData,
const bool  bTraitDataInitialized = true 
) const
inline

Get a trait from the subjective by its type.

If the trait is missing within the subject, the behavior is undefined and an assertion may be raised.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
[in]TraitTypeThe type of the trait to get.
[out]OutTraitDataThe trait data receiver.
[in]bTraitDataInitializedIs the OutTraitData buffer actually initialized?
Returns
The outcome of the operation.

◆ GetTraitmarkPass()

const FTraitmark & ISubjective::GetTraitmarkPass ( ) const
inline

◆ GetTraitmarkPermit()

const FTraitmark & ISubjective::GetTraitmarkPermit ( ) const
inline

Get the server-side list of traits allowed to be received from clients.

Can only be queried on a server-side subjective version.

Returns
The current traitmark permit whitelist.

◆ GetTraitPtr() [1/6]

template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >() &&IsUnsafe(Paradigm), T * > ISubjective::GetTraitPtr ( )
inline

Get the trait data from the subjective by its type.

Statically typed mutable version.

If the trait is missing within the subject, a nullptr is returned.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to get.
Returns
A pointer to the trait's data.

◆ GetTraitPtr() [2/6]

template<typename T , EParadigm Paradigm = EParadigm::Default>
auto ISubjective::GetTraitPtr ( )
inline

Get the trait data from the subjective by its type.

Statically typed mutable version.

If the trait is missing within the subject, a nullptr is returned.

Template Parameters
TThe type of the trait to get.
ParadigmThe paradigm to work under.
Returns
A pointer to the trait's data.

◆ GetTraitPtr() [3/6]

template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >() &&IsUnsafe(Paradigm), const T * > ISubjective::GetTraitPtr ( ) const
inline

Get the trait data from the subjective by its type.

Statically typed constant version.

If the trait is missing within the subject, a nullptr is returned.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to get.
Returns
A pointer to the constant trait's data.

◆ GetTraitPtr() [4/6]

template<typename T , EParadigm Paradigm = EParadigm::Default>
auto ISubjective::GetTraitPtr ( ) const
inline

Get the trait data from the subjective by its type.

Statically typed constant version.

If the trait is missing within the subject, a nullptr is returned.

Template Parameters
TThe type of the trait to get.
ParadigmThe paradigm to work under.
Returns
A pointer to the constant trait's data.

◆ GetTraitPtr() [5/6]

template<EParadigm Paradigm = EParadigm::Default>
TOutcomeIfUnsafe< Paradigm, void * > ISubjective::GetTraitPtr ( UScriptStruct *const  TraitType)
inline

Get the trait data from a subjective by its type.

If the trait is missing within the subject, a nullptr is returned.

Parameters
TraitTypeThe type of the trait to get. Must not be a nullptr.
Returns
A pointer to the trait's data.
nullptr If there is no such trait in the subjective.

◆ GetTraitPtr() [6/6]

template<EParadigm Paradigm = EParadigm::Default>
TOutcomeIfUnsafe< Paradigm, const void * > ISubjective::GetTraitPtr ( UScriptStruct *const  TraitType) const
inline

Get the trait data from the subjective by its type.

Constant version.

If the trait is missing within the subject, a nullptr is returned.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
TraitTypeThe type of the trait to get. Must not be a nullptr.
Returns
A pointer to the trait's data.
nullptr If there is no such trait in the subjective.

◆ GetTraitRecordsRef() [1/2]

TArray< FTraitRecord > & ISubjective::GetTraitRecordsRef ( )
inlineprotected

Direct access for the internal traits array.

Mutable version.

◆ GetTraitRecordsRef() [2/2]

const TArray< FTraitRecord > & ISubjective::GetTraitRecordsRef ( ) const
inline

Direct access for the internal traits array.

Constant version.

◆ HasDetail() [1/2]

template<class D >
std::enable_if< IsDetailClass< D >(), bool >::type ISubjective::HasDetail ( const bool  bIncludeDisabled = false) const
inline

Check if there is a detail of a specific class in the subjective.

Templated version.

Supports examining by a base class.

Template Parameters
DThe class of the detail to test for.
Parameters
bIncludeDisabledShould disabled details be considered?
Returns
The state of examination.

◆ HasDetail() [2/2]

bool ISubjective::HasDetail ( TSubclassOf< UDetail DetailClass,
const bool  bIncludeDisabled = false 
) const
inline

Check if there is a detail of a specific class in the subjective.

Supports examining by a base class.

Parameters
DetailClassThe class of the detail to test for.
bIncludeDisabledShould disabled details be considered?
Returns
The state of examination.

◆ HasFlag()

bool ISubjective::HasFlag ( const EFlagmarkBit  Flag) const
inline

Get the current state of a flag for the subjective.

Parameters
FlagThe flag to get the state of.
Returns
The state of the flag.

◆ HasTrait() [1/2]

template<typename T , TTraitTypeSecurity< T > = true>
bool ISubjective::HasTrait ( ) const
inline

Check if there is a trait of a specific type in the subjective.

Templated version.

◆ HasTrait() [2/2]

bool ISubjective::HasTrait ( UScriptStruct *const  TraitType) const
inline

Check if the subjective has a certain trait.

◆ IsBooted()

bool ISubjective::IsBooted ( ) const
inline

Check if the subject is booted.

The subject must be booted (initialized) by the booting mechanics prior to being processed by the ticking mechanics.

◆ IsClientSide()

bool ISubjective::IsClientSide ( ) const
inline

Check if the subjective is a client-side one.

◆ IsNetworkCapable()

virtual bool ISubjective::IsNetworkCapable ( ) const
inlinevirtual

Check if the subjective class is capable of networking.

This method should be overriden by the interface implementors to explicitly indicate that they have some mandatory properties for the functionality.

Reimplemented in ISolidSubjective, ASubjectiveActor, and USubjectiveActorComponent.

◆ IsRegistered()

bool ISubjective::IsRegistered ( ) const
inline

Check if the subjective is registered within the machine.

◆ IsServerSide()

bool ISubjective::IsServerSide ( ) const
inline

Check if the subjective is a server-side one.

◆ IsValidSubjective()

static bool ISubjective::IsValidSubjective ( const ISubjective *const  InSubjective)
inlinestatic

◆ MarkBooted()

bool ISubjective::MarkBooted ( )
inlineprotected

Set the subjective as booted.

Returns
The previous state of the booted flag.

◆ Matches() [1/3]

bool ISubjective::Matches ( const FDetailmark InDetailmark) const
inline

Check if the subjective matches a supplied detailmark as a filter.

◆ Matches() [2/3]

bool ISubjective::Matches ( const FFilter InFilter) const
inline

Check if the subjective matches a supplied filter.

◆ Matches() [3/3]

bool ISubjective::Matches ( const FTraitmark InTraitmark) const
inline

Check if the subjective matches a supplied traitmark as a filter.

◆ NotifyHandleDespawned()

virtual void ISubjective::NotifyHandleDespawned ( )
inlinevirtual

Called when the subject handle is despawned.

This method should basically self-destruct the subjective or finalize it somehow.

This method should never fail or raise any assertions.

If the self-destruction is not possible or not available for the subjective class, just silently exit the routine.

By default the top-level implementation of the method calls the respective blueprint event and exits silently.

Reimplemented in ASubjectiveActor, USubjectiveActorComponent, and USubjectiveUserWidget.

◆ ObtainNetworkIdFromServer()

virtual void ISubjective::ObtainNetworkIdFromServer ( )
inlineprotectedvirtual

Obtain a networking subject identifier from the server.

Should be implemented via a client RPC.

Reimplemented in ASubjectiveActor, and USubjectiveActorComponent.

◆ ObtainTrait() [1/5]

template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, T > ISubjective::ObtainTrait ( )
inline

Get a copy of an obtained trait from the subjective.

Statically typed paradigm version.

If the trait is not currently within the subjective, it gets created anew and the default value gets copied to the receiver.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to obtain.
Returns
The copy of the obtained trait.

◆ ObtainTrait() [2/5]

template<typename T , EParadigm Paradigm = EParadigm::Default, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm, T > ISubjective::ObtainTrait ( )
inline

Get a copy of an obtained trait from the subjective.

Statically typed version.

If the trait is not currently within the subjective, it gets created anew and the default value gets copied to the receiver.

Template Parameters
TThe type of the trait to obtain.
ParadigmThe paradigm to work under.
Returns
The copy of the obtained trait.

◆ ObtainTrait() [3/5]

template<EParadigm Paradigm = EParadigm::Default, typename T = void, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > ISubjective::ObtainTrait ( T OutTrait,
const bool  bTraitDataInitialized = true 
)
inline

Obtain a trait from the subjective.

Templated version.

If the trait is not currently within the subjective, it gets created anew and the default value gets copied to the receiver.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to obtain.
Parameters
[out]OutTraitThe trait receiver.
[in]bTraitDataInitializedIs the OutTrait actually initialized?
Returns
The outcome of the operation.

◆ ObtainTrait() [4/5]

template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> ISubjective::ObtainTrait ( T *const  OutTrait,
const bool  bTraitDataInitialized = true 
)
inline

Obtain a trait from the subjective.

Statically typed pointer version.

If the trait is not currently within the subjective, it gets created anew and the default value gets copied to the receiver.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to obtain.
Parameters
[out]OutTraitThe pointer to the buffer to receive the trait.
[in]bTraitDataInitializedIs the OutTrait actually initialized?
Returns
The outcome of the operation.

◆ ObtainTrait() [5/5]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::ObtainTrait ( UScriptStruct *  TraitType,
void *const  OutTraitData,
const bool  bTraitDataInitialized = true 
)
inline

Obtain a trait from the subjective by its type.

Dynamically typed outputting version.

If the trait is missing within the subject, the output data is unchanged and EApparatusStatus::Missing is returned.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
[in]TraitTypeThe type of the trait to obtain.
[out]OutTraitDataThe trait data receiver.
[in]bTraitDataInitializedIs the OutTraitData buffer actually initialized?
Returns
The outcome of the operation.

◆ PeerReceiveTrait_Implementation()

void ISubjective::PeerReceiveTrait_Implementation ( EPeerRole  PeerRole,
UScriptStruct *const  TraitType,
const TArray< uint8 > &  TraitData 
)
protected

Receive a trait on the server or the client.

The standard implementation for the RPC.

◆ PeerReceiveTrait_Validate()

bool ISubjective::PeerReceiveTrait_Validate ( EPeerRole  PeerRole,
UScriptStruct *const  TraitType,
const TArray< uint8 > &  TraitData 
)
protected

Validate receiving a trait on the server or the client.

The standard implementation for the RPC validation.

◆ PushTrait() [1/7]

template<EParadigm Paradigm, typename T >
TOutcomeIf< Paradigm, IsTraitType< T >()> ISubjective::PushTrait ( const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
)
inline

Send an extra trait to a remote peer.

Statically typed version.

On a client the trait can only be send from a current connection's owned actor, i.e. a pawn or a player controller.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to push.
Parameters
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for the transaction.
Returns
The outcome of the operation.

◆ PushTrait() [2/7]

template<typename T , EParadigm Paradigm = EParadigm::Default>
auto ISubjective::PushTrait ( const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
)
inline

Send an extra trait to a remote peer.

Statically typed default paradigm version.

On a client the trait can only be send from a current connection's owned actor, i.e. a pawn or a player controller.

Template Parameters
TThe type of the trait to push.
ParadigmThe paradigm to work under.
Parameters
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for the transaction.
Returns
The outcome of the operation.

◆ PushTrait() [3/7]

template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> ISubjective::PushTrait ( const T Trait,
const bool  bSetForLocal = false,
const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
)
inline

Send an extra trait to a remote peer.

Statically typed version.

On a client the trait can only be send from a current connection's owned actor, i.e. a pawn or a player controller.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to push.
Parameters
TraitThe trait to push.
bSetForLocalShould the trait be also set for the local version of the subject.
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for the transaction.
Returns
The outcome of the operation.
Deprecated:
since 1.23 The bSetForLocal argument is deprecated now. Set it explicitly and use the version of the method without the argument, please.

◆ PushTrait() [4/7]

template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> ISubjective::PushTrait ( const T Trait,
const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
)
inline

Send an extra trait to a remote peer.

Statically typed version.

On a client the trait can only be send from a current connection's owned actor, i.e. a pawn or a player controller.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to push.
Parameters
TraitThe trait to push.
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for the transaction.
Returns
The outcome of the operation.

◆ PushTrait() [5/7]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::PushTrait ( UScriptStruct *const  TraitType,
const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
) const
inline

Send an existing trait to a remote peer.

Dynamically typed immutable version.

On a client the trait can only be sent from a current connection's owned actor, i.e. a pawn or a player controller.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
TraitTypeThe type of the trait to send. Must not be a nullptr.
PeerRoleThe explicit peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for the transaction.
Returns
The outcome of the operation.

◆ PushTrait() [6/7]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::PushTrait ( UScriptStruct *const  TraitType,
const void *const  TraitData,
const bool  bSetForLocal,
const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
)
inline

Send an additional trait to a remote peer.

Dynamically typed version.

On a client the trait can only be sent from a current connection's owned actor, i.e. a pawn or a player controller.

Executes in a safe polite paradigm.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
TraitTypeThe type of the trait to send. Must not be a nullptr.
TraitDataThe data of the trait to send. Must not be a nullptr.
bSetForLocalShould the trait be also set for the local version of the subject.
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for the transaction.
Returns
The outcome of the operation.
Deprecated:
since 1.23 The bSetForLocal argument is deprecated now. Set it explicitly and use the version of the method without the argument, please.

◆ PushTrait() [7/7]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::PushTrait ( UScriptStruct *const  TraitType,
const void *const  TraitData,
const EPeerRole  PeerRole = EPeerRole::Auto,
const bool  bReliable = true 
)
inline

Send an additional trait to a remote peer.

Dynamically typed version.

On a client the trait can only be sent from a current connection's owned actor, i.e. a pawn or a player controller.

Executes in a safe polite paradigm.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
TraitTypeThe type of the trait to send. Must not be a nullptr.
TraitDataThe data of the trait to send. Must not be a nullptr.
PeerRoleThe peer role specification. If left as EPeerRole::Auto, the peer role is tried to be derived automatically. This may be ambiguous on a listen server, so you can provide one explicitly.
bReliableShould reliable channel be used for the transaction.
Returns
The outcome of the operation.

◆ ReceiveHandleDespawned()

void ISubjective::ReceiveHandleDespawned ( )

Called when the subject handle is despawned.

This method should basically self-destruct the subjective or finalize it somehow.

◆ RemoveAllTraits()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::RemoveAllTraits ( )
inline

Remove all of the traits from the subjective.

Template Parameters
ParadigmThe paradigm to work under.
Returns
The outcome of the operation.

◆ RemoveTrait() [1/3]

template<EParadigm Paradigm, typename T , TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > ISubjective::RemoveTrait ( )
inline

Remove a trait from the subjective.

Statically typed paradigm version.

If there is no such trait in the subjective, nothing is performed and EApparatusStatus::Noop is returned.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to remove.
Returns
The status of the operation.

◆ RemoveTrait() [2/3]

template<typename T , EParadigm Paradigm = EParadigm::Default, TTraitTypeSecurity< T > = true>
TOutcome< Paradigm > ISubjective::RemoveTrait ( )
inline

Remove a trait from the subjective.

Statically typed version.

If there is no such trait in the subjective, nothing is performed and EApparatusStatus::Noop is returned.

Template Parameters
TThe type of the trait to remove.
ParadigmThe paradigm to work under.
Returns
The status of the operation.

◆ RemoveTrait() [3/3]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::RemoveTrait ( UScriptStruct *const  TraitType)
inline

Remove a trait from the subjective.

Dynamically typed version.

If there is no such trait in the subjective, nothing is performed and EApparatusStatus::Noop is returned.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
TraitTypeThe type of the trait to remove. May be a nullptr and EApparatusStatus::Noop will be returned in that case.
Returns
The status of the operation.

◆ ServerRequestNetworkId_Implementation()

void ISubjective::ServerRequestNetworkId_Implementation ( )
protected

Request a unique network identifier for the subject of the subjective.

The standard implementation for the RPC.

◆ SetConnectionPermit()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::SetConnectionPermit ( UNetConnection *const  Connection)
inline

Set the server-side connection to a client from which it is allowed to push traits to this subjective.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
[in]ConnectionThe connection permit to set to.
Returns
The outcome of the operation.

◆ SetFlag()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, bool > ISubjective::SetFlag ( const EFlagmarkBit  Flag,
const bool  bState = true 
)
inline

Set a flag for the subjective.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
FlagThe flag to set. Must not be a system-level one.
bStateThe state of the flag to set.
Returns
The previous state of the flag.

◆ SetFlagmark()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, EFlagmark > ISubjective::SetFlagmark ( const EFlagmark  InFlagmark)
inline

Set the current flagmark for the subjective.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
InFlagmarkThe flagmark to set to. Must not contain any system-level flags.
Returns
The previous flagmark state.

◆ SetFlagmarkMasked()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, EFlagmark > ISubjective::SetFlagmarkMasked ( const EFlagmark  InFlagmark,
const EFlagmark  InMask = FM_AllUserLevel 
)
inline

Set the current flagmark for the subjective in a masked fashion.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
InFlagmarkThe flagmark to set to. Must not contain any system-level flags.
InMaskThe mask to apply while setting.
Returns
The previous flagmark state with the passed-in mask applied.

◆ SetMechanism()

template<EParadigm Paradigm>
TOutcome< Paradigm > ISubjective::SetMechanism ( AMechanism *const  Mechanism)
inline

Set the mechanism of the subjective.

For the actor-based subjectives the new mechanism must reside within the same world.

This procedure will essentially move the traits and the details to the new mechanism's own iterables.

Template Parameters
ParadigmThe safety paradigm to use.
Parameters
MechanismThe mechanism to set to. Must not be a nullptr.
Returns
The status of the operation.

◆ SetTrait() [1/2]

template<EParadigm Paradigm = EParadigm::Default, typename T = void>
TOutcomeIf< Paradigm, IsTraitType< T >()> ISubjective::SetTrait ( const T Trait)
inline

Set a trait of the subjective.

Statically typed version.

If the trait is not currently within the subjective, it gets created anew and set accordingly.

Template Parameters
ParadigmThe paradigm to work under.
TThe type of the trait to set.
Parameters
TraitThe trait to initialize with.
Returns
The outcome of the operation.

◆ SetTrait() [2/2]

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::SetTrait ( UScriptStruct *const  TraitType,
const void *const  TraitData 
)
inline

Set a trait of the subjective by its type.

Dynamically typed version.

If the trait is not currently within the subjective, it gets created anew and set accordingly

Template Parameters
ParadigmThe paradigm to work under.
Parameters
TraitTypeThe type of the trait to add.
TraitDataThe trait data to initialize with. May not be a nullptr, if the TraitType is not a nullptr.
Returns
The outcome of the operation.

◆ SetTraitmarkPass()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::SetTraitmarkPass ( const FTraitmark InTraitmarkPermit)
inline

◆ SetTraitmarkPermit()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm > ISubjective::SetTraitmarkPermit ( const FTraitmark InTraitmarkPermit)
inline

Set the server-side list of traits allowed to be received from clients.

Can only be set for a server-side subjective version.

Template Parameters
ParadigmThe paradigm to work under.
Parameters
InTraitmarkPermitThe new traitmark to be used as a whitelist.
Returns
The status of the operation.

◆ ShouldBeReplicated()

virtual bool ISubjective::ShouldBeReplicated ( ) const
inlineprotectedvirtual

Check if the entity be replicated.

Should be overriden in the descendants to explicitly state the the network functionality is needed on the subjective.

Reimplemented in ASubjectiveActor, and USubjectiveActorComponent.

◆ TakeBeltSlot() [1/3]

void ISubjective::TakeBeltSlot ( const int32  InSlotIndex)
inlineprotected

Change the current slot of the subjective, while preserving the belt.

This is a simple internal fields setter with minimal logic.

Parameters
InSlotIndexThe slot index to set.

◆ TakeBeltSlot() [2/3]

void ISubjective::TakeBeltSlot ( TYPE_OF_NULLPTR  )
inlineprotected

Reset the belt slot.

◆ TakeBeltSlot() [3/3]

void ISubjective::TakeBeltSlot ( UBelt *const  InBelt,
const int32  InSlotIndex 
)
inlineprotected

Set or reset the current belt slot of the subjective.

This is a simple internal fields setter with a minimal logic. You may use this method to reset the slot.

Parameters
InBeltThe belt to set. May be a nullptr in order to reset the slot.
InSlotIndexThe slot index to set. May be a InvalidSlotIndex if the first argument is nullptr.

◆ ToggleFlag()

template<EParadigm Paradigm = EParadigm::Default>
TOutcome< Paradigm, bool > ISubjective::ToggleFlag ( const EFlagmarkBit  Flag)
inline

Toggle a flag for the subjective.

Template Parameters
Theparadigm to work under.
Parameters
FlagThe flag to toggle. Must not be a system-level one.
Returns
The new state of the flag.

◆ Unregister()

template<EParadigm Paradigm = EParadigm::DefaultPortable>
TOutcome< Paradigm > ISubjective::Unregister ( )

Unregister the subjective from its mechanism in a manual fashion.

If the subjective is already registered, nothing is performed.

Template Parameters
ParadigmThe paradigm to work under.
Returns
The status of the operation.

Friends And Related Function Documentation

◆ AMechanism

friend class AMechanism
friend

◆ FBeltSlot

friend struct FBeltSlot
friend

◆ FBeltSlotCache

friend struct FBeltSlotCache
friend

◆ FFingerprint

friend struct FFingerprint
friend

◆ FSubjectInfo

friend struct FSubjectInfo
friend

◆ ISolidSubjective

friend class ISolidSubjective
friend

◆ UApparatusFunctionLibrary

friend class UApparatusFunctionLibrary
friend

◆ UBelt

friend class UBelt
friend

◆ UDetail

friend class UDetail
friend

◆ UMachine

friend class UMachine
friend

Member Data Documentation

◆ Belt

UBelt* ISubjective::Belt = nullptr
protected

A reference to a current subjective's belt (if any).

If is equal to nullptr, the subjective is not a part of any belt.

◆ bUnregistered

bool ISubjective::bUnregistered = false
protected

Was the subjective already unregistered via the normal DoUnregister() means.

◆ Handle

FSubjectHandle ISubjective::Handle
protected

The subject handle which points to a global subjects registry.

◆ InvalidSlotIndex

constexpr SlotIndexType ISubjective::InvalidSlotIndex = -1
staticconstexpr

Invalid belt slot index.

◆ SlotIndex

SlotIndexType ISubjective::SlotIndex = InvalidSlotIndex
protected

The index of the belt slot, this subject currently resides in.

◆ StandardNetworkPropertyBlockCache

FStandardSubjectiveNetworkPropertyBlock* ISubjective::StandardNetworkPropertyBlockCache = nullptr
mutableprotected

◆ StandardPropertyBlockCache

FStandardSubjectivePropertyBlock* ISubjective::StandardPropertyBlockCache = nullptr
mutableprotected

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