public void Receive(PhysicsSyncData packet) { [email protected](); this.packetQueue.Add(packet); this.packetReceived += 1; [email protected](); }
private void Apply(PhysicsSyncData packet) { this.lastPacketNumberRead = packet.PacketNumber; this.nodeDataList = packet.NodeData; this.projectileDataList = packet.ProjectileData; this.soundDataList = packet.SoundData; // Play sound right away and clear the list if (this.Delegate == null) { throw new Exception("No Delegate"); } foreach (var soundData in this.soundDataList) { this.Delegate.PlayPhysicsSound(soundData.GameObjectIndex, soundData.SoundEvent); } this.soundDataList.Clear(); this.UpdateObjectsFromData(false); }
public PhysicsSyncData GenerateData() { [email protected](); // Update Data of normal nodes for (var index = 0; index < this.objectList.Count; index++) { var data = this.objectList[index].GeneratePhysicsData(); if (data != null) { this.nodeDataList[index] = data; } } // Update Data of projectiles in the pool for (var index = 0; index < this.projectileList.Count; index++) { var data = this.projectileList[index].GeneratePhysicsData(); if (data != null) { this.projectileDataList[index] = data; } } // Packet number is used to determined the order of sync data. // Because Multipeer Connectivity does not guarantee the order of packet delivery, // we use the packet number to discard out of order packets. var packetNumber = GameTime.FrameCount % PhysicsSyncData.MaxPacketNumber; var packet = new PhysicsSyncData(packetNumber, this.nodeDataList, this.projectileDataList, this.soundDataList); // Clear sound data since it only needs to be played once this.soundDataList.Clear(); [email protected](); return(packet); }