Example #1
0
        protected void Update()
        {
            if (NetworkServer.Active && Time.time > _nextSendTime)
            {
                _nextSendTime = Time.time + 1f / SendRatePerSecond;

                int count = 0;
                if (_syncObjects.Count > 0)
                {
                    _sequenceId++;

                    foreach (IStateSynchronize obj in _syncObjects)
                    {
                        obj.CalculatePriority();
                    }
                    _syncObjects.Sort((p, q) =>
                                      q.Priority.CompareTo(p.Priority)); // Sorting by descinding order of priority
                    //_syncObjects = _syncObjects.OrderBy(x => x.CalculatePriority()).ToList();

                    _stateSyncMessage.SequenceNumber = _sequenceId;

                    List <StateUpdateMessage> stateUpdateMessageList = new List <StateUpdateMessage>();
                    foreach (IStateSynchronize obj in _syncObjects)
                    {
                        if (count > ObjectsSyncPerUpdate || obj.Priority == 0)
                        {
                            break;
                        }
                        count++;

                        StateUpdateMessage stateUpdateMessage = new StateUpdateMessage();
                        stateUpdateMessage.SyncObject      = obj.Prefab;
                        stateUpdateMessage.Id              = obj.UniqueId;
                        stateUpdateMessage.Position        = obj.Rigidbody.position;
                        stateUpdateMessage.Rotation        = obj.Rigidbody.rotation;
                        stateUpdateMessage.IsMoving        = obj.Rigidbody.IsSleeping();
                        stateUpdateMessage.LinearVelocity  = obj.Rigidbody.velocity;
                        stateUpdateMessage.AngularVelocity = obj.Rigidbody.angularVelocity;
                        stateUpdateMessageList.Add(stateUpdateMessage);

                        obj.Priority = 0;
                    }
                    _stateSyncMessage.NumberOfObjects = (ushort)stateUpdateMessageList.Count;
                    _stateSyncMessage.Objects         = stateUpdateMessageList.ToArray();

                    foreach (var connection in _connectedPlayers)
                    {
                        if (!Input.GetKey(KeyCode.Space))
                        {
                            NetworkServer.SendToObservers(connection, _stateSyncMessage, 1); // 1 is unreliable
                        }
                    }
                }
            }
            if (NetworkClient.Active)
            {
                ProcessPacket();
            }
        }
Example #2
0
        public StateUpdateMessage Copy()
        {
            StateUpdateMessage message = new StateUpdateMessage();

            message.SyncObject      = SyncObject;
            message.Id              = Id;
            message.Position        = Position;
            message.Rotation        = Rotation;
            message.IsMoving        = IsMoving;
            message.LinearVelocity  = LinearVelocity;
            message.AngularVelocity = AngularVelocity;
            return(message);
        }
Example #3
0
        public void OnDeserialize(Reader reader)
        {
            SequenceNumber  = reader.ReadUIntCompressed();
            NumberOfObjects = reader.ReadUShort();
            Objects         = new StateUpdateMessage[NumberOfObjects];

            for (int i = 0; i < NumberOfObjects; ++i)
            {
                Objects[i]            = new StateUpdateMessage();
                Objects[i].SyncObject = (SyncObject)reader.ReadByte();
                Objects[i].Id         = reader.ReadUShort();
                Objects[i].Position   = reader.ReadVector3Compressed();
                Objects[i].Rotation   = reader.ReadQuaternionCompressed();
                Objects[i].IsMoving   = reader.ReadBoolean();
//                if (Objects[i].IsMoving)
//                {
                Objects[i].LinearVelocity  = reader.ReadVector3Compressed();
                Objects[i].AngularVelocity = reader.ReadVector3Compressed();
//                }
            }
        }