Exemplo n.º 1
0
        public void Receive(PhysicsSyncData packet)
        {
            [email protected]();

            this.packetQueue.Add(packet);
            this.packetReceived += 1;

            [email protected]();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }