Nebula
Loading...
Searching...
No Matches
Game::World Class Reference

#include <world.h>

Classes

struct  AddStagedComponentCommand
 
struct  AllocateInstanceCommand
 
struct  DeallocInstanceCommand
 
struct  RemoveComponentCommand
 

Public Member Functions

 World (uint32_t hash)
 
 ~World ()
 
Entity CreateEntity (bool immediate=true)
 Create a new empty entity.
 
Entity CreateEntity (EntityCreateInfo const &info)
 Create a new entity from create info.
 
void DeleteEntity (Entity entity)
 Delete entity.
 
bool IsValid (Entity entity)
 Check if an entity ID is still valid.
 
bool HasInstance (Entity entity)
 Check if an entity has an instance. It might be valid, but not have received an instance just after it has been created.
 
EntityMapping GetEntityMapping (Entity entity)
 Returns the entity mapping of an entity.
 
bool HasComponent (Entity entity, ComponentId component)
 Check if entity has a specific component. (SLOW!)
 
template<typename TYPE >
bool HasComponent (Entity entity)
 Check if entity has a specific component.
 
MemDb::RowId GetInstance (Entity entity)
 Get instance of entity.
 
template<typename TYPE >
void RemoveComponent (Entity entity)
 Remove a component from an entity.
 
void RemoveComponent (Entity entity, ComponentId component)
 Remove a component from an entity.
 
template<typename TYPE >
void SetComponent (Entity entity, TYPE const &value)
 Set the value of an entitys component.
 
template<typename TYPE >
TYPE GetComponent (Entity entity)
 Get an entitys component.
 
template<typename TYPE >
TYPE * AddComponent (Entity entity)
 Create a component. This queues the component in a command buffer to be added later.
 
void * AddComponent (Entity entity, ComponentId component)
 Add a component to an entity. This queues the component in a command buffer to be added later.
 
ComponentDecayBuffer const GetDecayBuffer (ComponentId component)
 Get a decay buffer for the given component.
 
void SetComponentValue (Entity entity, ComponentId component, void *value, uint64_t size)
 Set the value of a component by providing a pointer and type size.
 
void ReinitializeComponent (Entity entity, ComponentId component, void *value, uint64_t size)
 Set the value of a component by providing a pointer and type size, then reinitialize the component.
 
Dataset Query (Filter filter)
 Query the entity database using specified filter set. This does NOT wait for resources to be available.
 
Dataset Query (Filter filter, Util::Array< MemDb::TableId > &tids)
 Query a subset of tables using a specified filter set.
 
Ptr< MemDb::DatabaseGetDatabase ()
 Get the entity database. Be careful when directly modifying the database, as some information is only kept track of via the World.
 
MemDb::TableId CreateEntityTable (EntityTableCreateInfo const &info)
 Create a table in the entity database that has a specific set of components.
 
FramePipelineGetFramePipeline ()
 Get the frame pipeline.
 
void MarkAsModified (Game::Entity entity)
 Mark an entity as modified in its table.
 
PackedLevelPreloadLevel (Util::String const &path)
 preload a level that can be instantiated
 
void UnloadLevel (PackedLevel *level)
 unload a preloaded level
 
void ExportLevel (Util::String const &path)
 Export the world as a level.
 
Entity AllocateEntity ()
 Allocate an entity id. Use this with caution!
 
void DeallocateEntity (Entity entity)
 Deallocate an entity id. Use this with caution!
 
MemDb::RowId AllocateInstance (Entity entity, MemDb::TableId table, Util::Blob const *const data=nullptr)
 Allocate an entity instance in a table. Use this with caution!
 
MemDb::RowId AllocateInstance (Entity entity, BlueprintId blueprint)
 Allocate an entity instance from a blueprint. Use this with caution!
 
MemDb::RowId AllocateInstance (Entity entity, TemplateId templateId)
 Allocate an entity instance from a template. Use this with caution!
 
void DeallocateInstance (MemDb::TableId table, MemDb::RowId instance)
 Deallocate an entity instance. Use this with caution!
 
void DeallocateInstance (Entity entity)
 Deallocate an entity instance. Use this with caution!
 
void Defragment (MemDb::TableId tableId)
 Defragment an entity table.
 
void * GetInstanceBuffer (MemDb::TableId const tableId, uint16_t partitionId, ComponentId const component)
 Get a pointer to the first instance of a component in a partition of an entity table. Use with caution!
 
void * GetColumnData (MemDb::TableId const tableId, uint16_t partitionId, MemDb::ColumnIndex const column)
 Get a pointer to the first instance of a column in a partition of an entity table. Use with caution!
 
void ExecuteAddComponentCommands ()
 dispatches all staged components to be added to entities
 
void RenderDebug ()
 
template<>
Game::Position GetComponent (Entity entity)
 
template<>
Game::Orientation GetComponent (Entity entity)
 
template<>
Game::Scale GetComponent (Entity entity)
 
template<>
void SetComponent (Entity entity, Game::Position const &value)
 
template<>
void SetComponent (Entity entity, Game::Orientation const &value)
 
template<>
void SetComponent (Entity entity, Game::Scale const &value)
 
template<>
Game::Position GetComponent (Entity entity)
 
template<>
Game::Orientation GetComponent (Entity entity)
 
template<>
Game::Scale GetComponent (Entity entity)
 
template<>
void SetComponent (Entity entity, Game::Position const &)
 
template<>
void SetComponent (Entity entity, Game::Orientation const &)
 
template<>
void SetComponent (Entity entity, Game::Scale const &)
 

Static Public Member Functions

static void Override (World *src, World *dst)
 copies and overrides dst with src. This is extremely destructive - make sure you understand the implications!
 

Public Attributes

bool componentInitializationEnabled = true
 Disable if initialization of components is not required (ex. when running as editor db)
 

Private Member Functions

void Start ()
 
void BeginFrame ()
 
void SimFrame ()
 
void EndFrame ()
 
void OnLoad ()
 
void OnSave ()
 
void ManageEntities ()
 
void Reset ()
 
void PrefilterProcessors ()
 
bool Prefiltered () const
 Check if the database is fully prefiltered.
 
void ClearDecayBuffers ()
 Clears all decay buffers. This is called by the game server automatically.
 
void ExecuteRemoveComponentCommands ()
 
void AddStagedComponentsToEntity (Entity entity, AddStagedComponentCommand *cmds, SizeT numCmds)
 
void RemoveComponentsFromEntity (Entity entity, RemoveComponentCommand *cmds, SizeT numCmds)
 
SizeT GetNumInstances (MemDb::TableId tid)
 Get total number of instances in an entity table.
 
MemDb::RowId Migrate (Entity entity, MemDb::TableId newTable)
 
void Migrate (Util::Array< Entity > const &entities, MemDb::TableId fromTable, MemDb::TableId newTable, Util::FixedArray< MemDb::RowId > &newInstances)
 
void DecayComponent (ComponentId component, MemDb::TableId tableId, MemDb::ColumnIndex column, MemDb::RowId instance)
 
void MoveInstance (MemDb::Table::Partition *partition, MemDb::RowId from, MemDb::RowId to)
 
void InitializeAllComponents (Entity entity, MemDb::TableId tableId, MemDb::RowId row)
 Run OnInit on all components. Use with caution, since they can only be initialized once and the function doesn't check for this.
 

Private Attributes

EntityPool pool
 used to allocate entity ids for this world
 
SizeT numEntities
 Number of entities alive.
 
Util::Array< EntityMappingentityMap
 maps entity index to table+row pair
 
Ptr< MemDb::Databasedb
 contains all entity instances
 
uint32_t hash
 world hash
 
Util::HashTable< BlueprintId, MemDb::TableIdblueprintToTableMap
 maps from blueprint to a table that has the same signature
 
Util::Queue< AllocateInstanceCommandallocQueue
 
Util::Queue< DeallocInstanceCommanddeallocQueue
 
Util::Array< AddStagedComponentCommandaddStagedQueue
 
Util::Array< RemoveComponentCommandremoveComponentQueue
 
Memory::ArenaAllocator< 4096_KB > componentStageAllocator
 allocator for staged components
 
bool cacheValid = false
 set to true if the caches for the frame pipeline is valid
 
FramePipeline pipeline
 the frame pipeline for this world
 
MemDb::TableId defaultTableId
 

Friends

class GameServer
 
class BlueprintManager
 
class PackedLevel
 

Constructor & Destructor Documentation

◆ World()

Game::World::World ( uint32_t hash)

◆ ~World()

Game::World::~World ( )

Member Function Documentation

◆ AddComponent() [1/2]

template<typename TYPE >
TYPE * Game::World::AddComponent ( Entity entity)
inline

Create a component. This queues the component in a command buffer to be added later.

◆ AddComponent() [2/2]

void * Game::World::AddComponent ( Entity entity,
Game::ComponentId id )

Add a component to an entity. This queues the component in a command buffer to be added later.

◆ AddStagedComponentsToEntity()

void Game::World::AddStagedComponentsToEntity ( Entity entity,
AddStagedComponentCommand * cmds,
SizeT numCmds )
private

◆ AllocateEntity()

Entity Game::World::AllocateEntity ( )

Allocate an entity id. Use this with caution!

◆ AllocateInstance() [1/3]

MemDb::RowId Game::World::AllocateInstance ( Entity entity,
BlueprintId blueprint )

Allocate an entity instance from a blueprint. Use this with caution!

◆ AllocateInstance() [2/3]

MemDb::RowId Game::World::AllocateInstance ( Entity entity,
MemDb::TableId table,
Util::Blob const *const data = nullptr )

Allocate an entity instance in a table. Use this with caution!

◆ AllocateInstance() [3/3]

MemDb::RowId Game::World::AllocateInstance ( Entity entity,
TemplateId templateId )

Allocate an entity instance from a template. Use this with caution!

◆ BeginFrame()

void Game::World::BeginFrame ( )
private

◆ ClearDecayBuffers()

void Game::World::ClearDecayBuffers ( )
private

Clears all decay buffers. This is called by the game server automatically.

◆ CreateEntity() [1/2]

Game::Entity Game::World::CreateEntity ( bool immediate = true)

Create a new empty entity.

◆ CreateEntity() [2/2]

Game::Entity Game::World::CreateEntity ( EntityCreateInfo const & info)

Create a new entity from create info.

◆ CreateEntityTable()

MemDb::TableId Game::World::CreateEntityTable ( EntityTableCreateInfo const & info)

Create a table in the entity database that has a specific set of components.

◆ DeallocateEntity()

void Game::World::DeallocateEntity ( Entity entity)

Deallocate an entity id. Use this with caution!

◆ DeallocateInstance() [1/2]

void Game::World::DeallocateInstance ( Entity entity)

Deallocate an entity instance. Use this with caution!

◆ DeallocateInstance() [2/2]

void Game::World::DeallocateInstance ( MemDb::TableId table,
MemDb::RowId instance )

Deallocate an entity instance. Use this with caution!

◆ DecayComponent()

void Game::World::DecayComponent ( Game::ComponentId component,
MemDb::TableId tableId,
MemDb::ColumnIndex column,
MemDb::RowId instance )
private

◆ Defragment()

void Game::World::Defragment ( MemDb::TableId tableId)

Defragment an entity table.

◆ DeleteEntity()

void Game::World::DeleteEntity ( Game::Entity entity)

Delete entity.

◆ EndFrame()

void Game::World::EndFrame ( )
private

◆ ExecuteAddComponentCommands()

void Game::World::ExecuteAddComponentCommands ( )

dispatches all staged components to be added to entities

◆ ExecuteRemoveComponentCommands()

void Game::World::ExecuteRemoveComponentCommands ( )
private

◆ ExportLevel()

void Game::World::ExportLevel ( Util::String const & path)

Export the world as a level.

◆ GetColumnData()

void * Game::World::GetColumnData ( MemDb::TableId const tableId,
uint16_t partitionId,
MemDb::ColumnIndex const column )

Get a pointer to the first instance of a column in a partition of an entity table. Use with caution!

◆ GetComponent() [1/7]

template<>
Game::Position Game::World::GetComponent ( Entity entity)

◆ GetComponent() [2/7]

template<>
Game::Orientation Game::World::GetComponent ( Entity entity)

◆ GetComponent() [3/7]

template<>
Game::Scale Game::World::GetComponent ( Entity entity)

◆ GetComponent() [4/7]

template<typename TYPE >
TYPE Game::World::GetComponent ( Entity entity)
inline

Get an entitys component.

◆ GetComponent() [5/7]

template<>
Game::Position Game::World::GetComponent ( Entity entity)

◆ GetComponent() [6/7]

template<>
Game::Orientation Game::World::GetComponent ( Entity entity)

◆ GetComponent() [7/7]

template<>
Game::Scale Game::World::GetComponent ( Entity entity)

◆ GetDatabase()

Ptr< MemDb::Database > Game::World::GetDatabase ( )

Get the entity database. Be careful when directly modifying the database, as some information is only kept track of via the World.

◆ GetDecayBuffer()

ComponentDecayBuffer const Game::World::GetDecayBuffer ( Game::ComponentId component)

Get a decay buffer for the given component.

◆ GetEntityMapping()

EntityMapping Game::World::GetEntityMapping ( Game::Entity entity)

Returns the entity mapping of an entity.

◆ GetFramePipeline()

FramePipeline & Game::World::GetFramePipeline ( )

Get the frame pipeline.

◆ GetInstance()

MemDb::RowId Game::World::GetInstance ( Entity entity)

Get instance of entity.

◆ GetInstanceBuffer()

void * Game::World::GetInstanceBuffer ( MemDb::TableId const tableId,
uint16_t partitionId,
ComponentId const component )

Get a pointer to the first instance of a component in a partition of an entity table. Use with caution!

◆ GetNumInstances()

SizeT Game::World::GetNumInstances ( MemDb::TableId tid)
private

Get total number of instances in an entity table.

◆ HasComponent() [1/2]

template<typename TYPE >
bool Game::World::HasComponent ( Game::Entity entity)
inline

Check if entity has a specific component.

◆ HasComponent() [2/2]

bool Game::World::HasComponent ( Entity entity,
ComponentId component )

Check if entity has a specific component. (SLOW!)

TODO: This is not thread safe!

◆ HasInstance()

bool Game::World::HasInstance ( Entity entity)

Check if an entity has an instance. It might be valid, but not have received an instance just after it has been created.

◆ InitializeAllComponents()

void Game::World::InitializeAllComponents ( Entity entity,
MemDb::TableId tableId,
MemDb::RowId row )
private

Run OnInit on all components. Use with caution, since they can only be initialized once and the function doesn't check for this.

◆ IsValid()

bool Game::World::IsValid ( Entity entity)

Check if an entity ID is still valid.

◆ ManageEntities()

void Game::World::ManageEntities ( )
private

◆ MarkAsModified()

void Game::World::MarkAsModified ( Game::Entity entity)

Mark an entity as modified in its table.

◆ Migrate() [1/2]

MemDb::RowId Game::World::Migrate ( Entity entity,
MemDb::TableId newTable )
private

◆ Migrate() [2/2]

void Game::World::Migrate ( Util::Array< Entity > const & entities,
MemDb::TableId fromTableId,
MemDb::TableId newTableId,
Util::FixedArray< MemDb::RowId > & newInstances )
private
Parameters
newInstancesWill be filled with the new instance ids in the destination table.
Note
This assumes ALL entities in the entity array is of same table!

◆ MoveInstance()

void Game::World::MoveInstance ( MemDb::Table::Partition * partition,
MemDb::RowId from,
MemDb::RowId to )
private

◆ OnLoad()

void Game::World::OnLoad ( )
private

◆ OnSave()

void Game::World::OnSave ( )
private

◆ Override()

void Game::World::Override ( World * src,
World * dst )
static

copies and overrides dst with src. This is extremely destructive - make sure you understand the implications!

◆ Prefiltered()

bool Game::World::Prefiltered ( ) const
private

Check if the database is fully prefiltered.

◆ PrefilterProcessors()

void Game::World::PrefilterProcessors ( )
private

◆ PreloadLevel()

PackedLevel * Game::World::PreloadLevel ( Util::String const & path)

preload a level that can be instantiated

◆ Query() [1/2]

Dataset Game::World::Query ( Filter filter)

Query the entity database using specified filter set. This does NOT wait for resources to be available.

Returns
Dataset with category table views.
Note
The category table view buffer can be NULL if the filter contains a non-typed/flag component.

◆ Query() [2/2]

Dataset Game::World::Query ( Filter filter,
Util::Array< MemDb::TableId > & tids )

Query a subset of tables using a specified filter set.

Modifies the tables array so that it only contains valid tables. This does NOT wait for resources to be available.

◆ ReinitializeComponent()

void Game::World::ReinitializeComponent ( Game::Entity entity,
Game::ComponentId component,
void * value,
uint64_t size )

Set the value of a component by providing a pointer and type size, then reinitialize the component.

◆ RemoveComponent() [1/2]

template<typename TYPE >
void Game::World::RemoveComponent ( Entity entity)
inline

Remove a component from an entity.

◆ RemoveComponent() [2/2]

void Game::World::RemoveComponent ( Entity entity,
ComponentId component )

Remove a component from an entity.

◆ RemoveComponentsFromEntity()

void Game::World::RemoveComponentsFromEntity ( Entity entity,
RemoveComponentCommand * cmds,
SizeT numCmds )
private

◆ RenderDebug()

void Game::World::RenderDebug ( )

◆ Reset()

void Game::World::Reset ( )
private

◆ SetComponent() [1/7]

template<>
void Game::World::SetComponent ( Entity entity,
Game::Orientation const &  )

◆ SetComponent() [2/7]

template<>
void Game::World::SetComponent ( Entity entity,
Game::Orientation const & value )

◆ SetComponent() [3/7]

template<>
void Game::World::SetComponent ( Entity entity,
Game::Position const &  )

◆ SetComponent() [4/7]

template<>
void Game::World::SetComponent ( Entity entity,
Game::Position const & value )

◆ SetComponent() [5/7]

template<>
void Game::World::SetComponent ( Entity entity,
Game::Scale const &  )

◆ SetComponent() [6/7]

template<>
void Game::World::SetComponent ( Entity entity,
Game::Scale const & value )

◆ SetComponent() [7/7]

template<typename TYPE >
void Game::World::SetComponent ( Entity entity,
TYPE const & value )
inline

Set the value of an entitys component.

◆ SetComponentValue()

void Game::World::SetComponentValue ( Game::Entity entity,
Game::ComponentId component,
void * value,
uint64_t size )

Set the value of a component by providing a pointer and type size.

◆ SimFrame()

void Game::World::SimFrame ( )
private

◆ Start()

void Game::World::Start ( )
private

◆ UnloadLevel()

void Game::World::UnloadLevel ( PackedLevel * level)

unload a preloaded level

Friends And Related Symbol Documentation

◆ BlueprintManager

friend class BlueprintManager
friend

◆ GameServer

friend class GameServer
friend

◆ PackedLevel

friend class PackedLevel
friend

Member Data Documentation

◆ addStagedQueue

Util::Array<AddStagedComponentCommand> Game::World::addStagedQueue
private

◆ allocQueue

Util::Queue<AllocateInstanceCommand> Game::World::allocQueue
private

◆ blueprintToTableMap

Util::HashTable<BlueprintId, MemDb::TableId> Game::World::blueprintToTableMap
private

maps from blueprint to a table that has the same signature

◆ cacheValid

bool Game::World::cacheValid = false
private

set to true if the caches for the frame pipeline is valid

◆ componentInitializationEnabled

bool Game::World::componentInitializationEnabled = true

Disable if initialization of components is not required (ex. when running as editor db)

◆ componentStageAllocator

Memory::ArenaAllocator<4096_KB> Game::World::componentStageAllocator
private

allocator for staged components

◆ db

Ptr<MemDb::Database> Game::World::db
private

contains all entity instances

◆ deallocQueue

Util::Queue<DeallocInstanceCommand> Game::World::deallocQueue
private

◆ defaultTableId

MemDb::TableId Game::World::defaultTableId
private

◆ entityMap

Util::Array<EntityMapping> Game::World::entityMap
private

maps entity index to table+row pair

◆ hash

uint32_t Game::World::hash
private

world hash

◆ numEntities

SizeT Game::World::numEntities
private

Number of entities alive.

◆ pipeline

FramePipeline Game::World::pipeline
private

the frame pipeline for this world

◆ pool

EntityPool Game::World::pool
private

used to allocate entity ids for this world

◆ removeComponentQueue

Util::Array<RemoveComponentCommand> Game::World::removeComponentQueue
private

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