MCPcopy Create free account
hub / github.com/Norbyte/bg3se / CreateComponentImmediateRaw

Method CreateComponentImmediateRaw

BG3Extender/GameDefinitions/EntitySystem.cpp:811–842  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

809}
810
811void* EntitySystemHelpersBase::CreateComponentImmediateRaw(EntityHandle entity, ExtComponentType type)
812{
813 auto const& meta = GetComponentMeta(type);
814 if (meta.ComponentIndex == UndefinedComponent
815 || meta.Properties == nullptr
816 || meta.Properties->Construct == nullptr) {
817 return nullptr;
818 }
819
820 ComponentFrameStorageIndex index;
821 void* ptr;
822 auto iwc = GetEntityWorld()->Cache;
823 if (iwc->PrepareAddComponent(entity, meta.ComponentIndex, ptr)) {
824 if (meta.IsProxy) {
825 auto comp = (void**)ptr;
826 *comp = GameAllocRaw(meta.Size);
827 memset(*comp, 0, meta.Size);
828 meta.Properties->Construct(*comp);
829 return *comp;
830 } else {
831 // Ensure we're using zeroed memory since not every component has proper default constructors
832 // and could end up using leftover garbage from memory
833 memset(ptr, 0, meta.Size);
834 meta.Properties->Construct(ptr);
835 return ptr;
836 }
837
838 iwc->FinalizeAddComponent(entity, meta.ComponentIndex, ptr);
839 }
840
841 return nullptr;
842}
843
844bool EntitySystemHelpersBase::RemoveComponent(EntityHandle entity, ExtComponentType type)
845{

Callers

nothing calls this directly

Calls 3

GetEntityWorldFunction · 0.85
PrepareAddComponentMethod · 0.80
FinalizeAddComponentMethod · 0.80

Tested by

no test coverage detected