MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / DespawnObject

Method DespawnObject

Source/Engine/Networking/NetworkReplicator.cpp:1518–1582  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1516}
1517
1518void NetworkReplicator::DespawnObject(ScriptingObject* obj)
1519{
1520 if (!obj || NetworkManager::IsOffline())
1521 return;
1522 PROFILE_MEM(Networking);
1523 ScopeLock lock(ObjectsLock);
1524 const auto it = Objects.Find(obj->GetID());
1525 if (it == Objects.End())
1526 {
1527 // Special case if we're just spawning this object
1528 for (int32 i = 0; i < SpawnQueue.Count(); i++)
1529 {
1530 auto& item = SpawnQueue[i];
1531 if (item.Object == obj)
1532 {
1533 SpawnQueue.RemoveAt(i);
1534 DeleteNetworkObject(obj);
1535 break;
1536 }
1537 }
1538 return;
1539 }
1540 auto& item = it->Item;
1541 if (item.Object != obj || !item.Spawned || item.OwnerClientId != NetworkManager::LocalClientId)
1542 return;
1543
1544 // Register for despawning (batched during update)
1545 auto& despawn = DespawnQueue.AddOne();
1546 despawn.Id = obj->GetID();
1547 if (item.TargetClientIds.IsValid())
1548 {
1549 despawn.Targets = item.TargetClientIds;
1550 }
1551 else
1552 {
1553 // Snapshot current recipients to avoid sending despawn to clients that connect later (and never got the spawn)
1554 Array<uint32, InlinedAllocation<8>> clientIds;
1555 for (const NetworkClient* client : NetworkManager::Clients)
1556 {
1557 if (client->State == NetworkConnectionState::Connected && client->ClientId != item.OwnerClientId)
1558 clientIds.Add(client->ClientId);
1559 }
1560 despawn.Targets.Copy(clientIds);
1561 }
1562
1563 // Prevent spawning
1564 for (int32 i = 0; i < SpawnQueue.Count(); i++)
1565 {
1566 if (SpawnQueue[i].Object == obj)
1567 {
1568 SpawnQueue.RemoveAt(i);
1569 break;
1570 }
1571 }
1572
1573 // Delete object locally
1574 NETWORK_REPLICATOR_LOG(Info, "[NetworkReplicator] Despawn object {}", item.ObjectId);
1575 DespawnedObjects.Add(item.ObjectId);

Callers

nothing calls this directly

Calls 13

IsOfflineFunction · 0.85
DeleteNetworkObjectFunction · 0.85
GetIDMethod · 0.80
AddOneMethod · 0.80
FindMethod · 0.45
EndMethod · 0.45
CountMethod · 0.45
RemoveAtMethod · 0.45
IsValidMethod · 0.45
AddMethod · 0.45
CopyMethod · 0.45
RemoveObjectMethod · 0.45

Tested by

no test coverage detected