Open 3D Engine AzFramework API Reference 23.10.0
O3DE is an open-source, fully-featured, high-fidelity, modular 3D engine for building games and simulations, available to every industry.
AzFramework::SpawnableEntitiesManager Class Reference

Inherits SpawnableEntitiesInterface::Registrar.

Classes

struct  BarrierCommand
 
struct  ClaimEntitiesCommand
 
struct  DespawnAllEntitiesCommand
 
struct  DespawnEntityCommand
 
struct  DestroyTicketCommand
 
struct  ListEntitiesCommand
 
struct  ListIndicesEntitiesCommand
 
struct  LoadBarrierCommand
 
struct  Queue
 
struct  RegisterTicketCommand
 
struct  ReloadSpawnableCommand
 
struct  RetrieveTicketCommand
 
struct  SpawnAllEntitiesCommand
 
struct  SpawnEntitiesCommand
 
struct  Ticket
 
struct  UpdateEntityAliasTypesCommand
 

Public Types

enum class  CommandQueueStatus : bool { HasCommandsLeft , NoCommandsLeft }
 
enum class  CommandQueuePriority { High = 1 << 0 , Regular = 1 << 1 }
 
using EntityIdMap = AZStd::unordered_map< AZ::EntityId, AZ::EntityId >
 

Public Member Functions

 AZ_RTTI (AzFramework::SpawnableEntitiesManager, "{6E14333F-128C-464C-94CA-A63B05A5E51C}")
 
 AZ_CLASS_ALLOCATOR (SpawnableEntitiesManager, AZ::SystemAllocator)
 
void SpawnAllEntities (EntitySpawnTicket &ticket, SpawnAllEntitiesOptionalArgs optionalArgs={}) override
 
void SpawnEntities (EntitySpawnTicket &ticket, AZStd::vector< uint32_t > entityIndices, SpawnEntitiesOptionalArgs optionalArgs={}) override
 
void DespawnAllEntities (EntitySpawnTicket &ticket, DespawnAllEntitiesOptionalArgs optionalArgs={}) override
 
void DespawnEntity (AZ::EntityId entityId, EntitySpawnTicket &ticket, DespawnEntityOptionalArgs optionalArgs={}) override
 
void RetrieveTicket (EntitySpawnTicket::Id ticketId, RetrieveEntitySpawnTicketCallback callback, RetrieveTicketOptionalArgs optionalArgs={}) override
 
void ReloadSpawnable (EntitySpawnTicket &ticket, AZ::Data::Asset< Spawnable > spawnable, ReloadSpawnableOptionalArgs optionalArgs={}) override
 
void UpdateEntityAliasTypes (EntitySpawnTicket &ticket, AZStd::vector< EntityAliasTypeChange > updatedAliases, UpdateEntityAliasTypesOptionalArgs optionalArgs={}) override
 
void ListEntities (EntitySpawnTicket &ticket, ListEntitiesCallback listCallback, ListEntitiesOptionalArgs optionalArgs={}) override
 
void ListIndicesAndEntities (EntitySpawnTicket &ticket, ListIndicesEntitiesCallback listCallback, ListEntitiesOptionalArgs optionalArgs={}) override
 
void ClaimEntities (EntitySpawnTicket &ticket, ClaimEntitiesCallback listCallback, ClaimEntitiesOptionalArgs optionalArgs={}) override
 
void Barrier (EntitySpawnTicket &spawnInfo, BarrierCallback completionCallback, BarrierOptionalArgs optionalArgs={}) override
 
void LoadBarrier (EntitySpawnTicket &spawnInfo, BarrierCallback completionCallback, LoadBarrierOptionalArgs optionalArgs={}) override
 
CommandQueueStatus ProcessQueue (CommandQueuePriority priority)
 

Protected Types

enum class  CommandResult : bool { Executed , Requeue }
 
using Requests = AZStd::variant< SpawnAllEntitiesCommand, SpawnEntitiesCommand, DespawnAllEntitiesCommand, DespawnEntityCommand, ReloadSpawnableCommand, UpdateEntityAliasTypesCommand, ListEntitiesCommand, ListIndicesEntitiesCommand, ClaimEntitiesCommand, BarrierCommand, LoadBarrierCommand, RetrieveTicketCommand, RegisterTicketCommand, DestroyTicketCommand >
 

Protected Member Functions

template<typename T >
void QueueRequest (EntitySpawnTicket &ticket, SpawnablePriority priority, T &&request)
 
void * CreateTicket (AZ::Data::Asset< Spawnable > &&spawnable) override
 
void IncrementTicketReference (void *ticket) override
 
void DecrementTicketReference (void *ticket) override
 
EntitySpawnTicket::Id GetTicketId (void *ticket) override
 
const AZ::Data::Asset< Spawnable > & GetSpawnableOnTicket (void *ticket) override
 
CommandQueueStatus ProcessQueue (Queue &queue)
 
AZ::Entity * CloneSingleEntity (const AZ::Entity &entityPrototype, EntityIdMap &prototypeToCloneMap, AZ::SerializeContext &serializeContext)
 
AZ::Entity * CloneSingleAliasedEntity (const AZ::Entity &entityPrototype, const Spawnable::EntityAlias &alias, EntityIdMap &prototypeToCloneMap, AZ::Entity *previouslySpawnedEntity, AZ::SerializeContext &serializeContext)
 
void AppendComponents (AZ::Entity &target, const AZ::Entity::ComponentArrayType &componentPrototypes, EntityIdMap &prototypeToCloneMap, AZ::SerializeContext &serializeContext)
 
CommandResult ProcessRequest (SpawnAllEntitiesCommand &request)
 
CommandResult ProcessRequest (SpawnEntitiesCommand &request)
 
CommandResult ProcessRequest (DespawnAllEntitiesCommand &request)
 
CommandResult ProcessRequest (DespawnEntityCommand &request)
 
CommandResult ProcessRequest (ReloadSpawnableCommand &request)
 
CommandResult ProcessRequest (UpdateEntityAliasTypesCommand &request)
 
CommandResult ProcessRequest (ListEntitiesCommand &request)
 
CommandResult ProcessRequest (ListIndicesEntitiesCommand &request)
 
CommandResult ProcessRequest (ClaimEntitiesCommand &request)
 
CommandResult ProcessRequest (BarrierCommand &request)
 
CommandResult ProcessRequest (LoadBarrierCommand &request)
 
CommandResult ProcessRequest (RetrieveTicketCommand &request)
 
CommandResult ProcessRequest (RegisterTicketCommand &request)
 
CommandResult ProcessRequest (DestroyTicketCommand &request)
 
void InitializeEntityIdMappings (const Spawnable::EntityList &entities, EntityIdMap &idMap, AZStd::unordered_set< AZ::EntityId > &previouslySpawned)
 
void RefreshEntityIdMapping (const AZ::EntityId &entityId, EntityIdMap &idMap, AZStd::unordered_set< AZ::EntityId > &previouslySpawned)
 

Protected Attributes

Queue m_highPriorityQueue
 
Queue m_regularPriorityQueue
 
AZ::SerializeContext * m_defaultSerializeContext { nullptr }
 
SpawnablePriority m_highPriorityThreshold { 64 }
 
AZStd::unordered_map< EntitySpawnTicket::Id, Ticket * > m_entitySpawnTicketMap
 
AZStd::atomic_int m_totalTickets { 0 }
 
AZStd::atomic_int m_ticketsPendingRegistration { 0 }
 

Member Function Documentation

◆ InitializeEntityIdMappings()

void AzFramework::SpawnableEntitiesManager::InitializeEntityIdMappings ( const Spawnable::EntityList &  entities,
EntityIdMap &  idMap,
AZStd::unordered_set< AZ::EntityId > &  previouslySpawned 
)
protected

Generate a base set of original-to-new entity ID mappings to use during spawning. Since Entity references get fixed up on an entity-by-entity basis while spawning, it's important to have the complete set of new IDs available right at the start. This way, entities that refer to other entities that haven't spawned yet will still get their references remapped correctly.

Member Data Documentation

◆ m_highPriorityThreshold

SpawnablePriority AzFramework::SpawnableEntitiesManager::m_highPriorityThreshold { 64 }
protected

The threshold used to determine if a request goes in the regular (if bigger than the value) or high priority queue (if smaller or equal to this value). The starting value of 64 is chosen as it's between default values SpawnablePriority_High and SpawnablePriority_Default which gives users a bit of room to fine tune the priorities as this value can be configured through the Settings Registry under the key "/O3DE/AzFramework/Spawnables/HighPriorityThreshold".


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