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

Method RemoveComponent

BG3Extender/GameDefinitions/EntitySystem.cpp:395–422  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

393}
394
395bool ImmediateWorldCache::RemoveComponent(EntityHandle entity, ComponentTypeIndex type)
396{
397 auto typeInfo = EntityWorld->ComponentRegistry_.Get(type);
398 auto component = EntityWorld->GetRawComponent(entity, type, typeInfo->InlineSize, false);
399 if (!component) {
400 return false;
401 }
402
403 auto changes = GetOrAddComponentChanges(type);
404 auto change = changes->Components.find(entity);
405
406 if (!change) {
407 // TODO - different behavior for proxy objects?
408 auto& onDestroy = Callbacks->Get(type)->OnDestroy;
409 EntityRef e{
410 .Handle = entity,
411 .World = EntityWorld
412 };
413 onDestroy.Invoke(&e, component);
414
415 // Default change means deletion
416 change = changes->Components.add(entity, ComponentChange{});
417 return true;
418 } else {
419 WARN("A change for component [%d] already exists on entity [%016llx]!", type, entity.Handle);
420 return false;
421 }
422}
423
424bool ImmediateWorldCache::PrepareAddComponent(EntityHandle entity, ComponentTypeIndex type, void*& component)
425{

Callers

nothing calls this directly

Calls 8

GetEntityWorldFunction · 0.85
GetRawComponentMethod · 0.80
InvokeMethod · 0.80
GetOrAddEntityChangeMethod · 0.80
DeferredMethod · 0.80
GetMethod · 0.45
findMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected