Fix networked objects dirtying for replication

This commit is contained in:
Wojtek Figat
2024-03-29 13:02:23 +01:00
parent 5525e895cf
commit 09f5ac0ed6
2 changed files with 14 additions and 7 deletions

View File

@@ -167,7 +167,7 @@ void NetworkReplicationGridNode::AddObject(NetworkReplicationHierarchyObject obj
cell->MinCullDistance = obj.CullDistance;
}
cell->Node->AddObject(obj);
_objectToCell[obj.Object] = coord;
_objectToCell[obj.Object.Get()] = coord;
// Cache minimum culling distance for a whole cell to skip it at once
cell->MinCullDistance = Math::Min(cell->MinCullDistance, obj.CullDistance);
@@ -176,12 +176,10 @@ void NetworkReplicationGridNode::AddObject(NetworkReplicationHierarchyObject obj
bool NetworkReplicationGridNode::RemoveObject(ScriptingObject* obj)
{
Int3 coord;
if (!_objectToCell.TryGet(obj, coord))
{
return false;
}
if (_children[coord].Node->RemoveObject(obj))
{
_objectToCell.Remove(obj);
@@ -195,12 +193,10 @@ bool NetworkReplicationGridNode::RemoveObject(ScriptingObject* obj)
bool NetworkReplicationGridNode::GetObject(ScriptingObject* obj, NetworkReplicationHierarchyObject& result)
{
Int3 coord;
if (!_objectToCell.TryGet(obj, coord))
{
return false;
}
if (_children[coord].Node->GetObject(obj, result))
{
return true;
@@ -208,6 +204,16 @@ bool NetworkReplicationGridNode::GetObject(ScriptingObject* obj, NetworkReplicat
return false;
}
bool NetworkReplicationGridNode::DirtyObject(ScriptingObject* obj)
{
Int3 coord;
if (_objectToCell.TryGet(obj, coord))
{
return _children[coord].Node->DirtyObject(obj);
}
return NetworkReplicationNode::DirtyObject(obj);
}
void NetworkReplicationGridNode::Update(NetworkReplicationHierarchyUpdateResult* result)
{
CHECK(result);