private void SynchronizeNetworkedNodes(int PeerId) { foreach (Node NetworkedNode in OrderedNetworkedNodes) { Vector3 SpawnPos = new Vector3(); Node2D NetworkedNode2D = NetworkedNode as Node2D; Spatial NetworkedNodeSpatial = NetworkedNode as Spatial; if (NetworkedNode2D != null) { SpawnPos = NetworkedNode2D.Position.To3D(); } else if (NetworkedNodeSpatial != null) { SpawnPos = NetworkedNodeSpatial.Translation; } string ParentPath = NetworkedNode.GetParent().GetPath(); if (NetworkedTypes.ContainsKey(NetworkedNode)) { string TypePath = NetworkedTypes[NetworkedNode]; RpcId(PeerId, nameof(SpawnNodeType), TypePath, ParentPath, NetworkedNode.Name, NetworkedNode.GetNetworkMaster(), SpawnPos); } else if (NetworkedScenes.ContainsKey(NetworkedNode)) { string ScenePath = NetworkedScenes[NetworkedNode]; RpcId(PeerId, nameof(SpawnNodeScene), ScenePath, ParentPath, NetworkedNode.Name, NetworkedNode.GetNetworkMaster(), SpawnPos); } } }
private void ClearNetworkedNodes() { foreach (Node NetworkedNode in OrderedNetworkedNodes.Where(IsInstanceValid)) { NetworkedNode.RemoveAndFree(); } OrderedNetworkedNodes.Clear(); NetworkedScenes.Clear(); NetworkedTypes.Clear(); }