Esempio n. 1
0
        private void ReadShared(BitStream stream, MyNetworkClient sender, out MyEntity controlledEntity)
        {
            controlledEntity = null;

            ClientTimeStamp = stream.ReadUInt32();
            var hasControlledEntity = stream.ReadBool();

            if (!hasControlledEntity)
            {
                Vector3D pos = Vector3D.Zero;
                stream.Serialize(ref pos); // 24B
                Position = pos;
            }
            else
            {
                var      entityId = stream.ReadInt64();
                MyEntity entity;
                if (!MyEntities.TryGetEntityById(entityId, out entity))
                {
                    return;
                }

                Position = entity.WorldMatrix.Translation;

                // TODO: Obsolete check?
                MySyncEntity syncEntity = entity.SyncObject as MySyncEntity;
                if (syncEntity == null)
                {
                    return;
                }
                controlledEntity = entity;
            }
        }
 public void MarkPhysicsDirty(MySyncEntity entity)
 {
     if (IsServer)
     {
         m_dirtyPhysicsEntities.Add(entity);
     }
 }
Esempio n. 3
0
        public void MarkPhysicsDirty(MySyncEntity entity)
        {
            // Memory leak - blocks are kept in memory
            // All entities are put into this hashset, but the hashset is not being cleared since revision 62788.

            /*if (IsServer)
             * {
             *  m_dirtyPhysicsEntities.Add(entity);
             * }*/
        }
Esempio n. 4
0
        private void ReadShared(BitStream stream, MyNetworkClient sender, out MyEntity controlledEntity)
        {
            controlledEntity = null;

            var hasControlledEntity = stream.ReadBool();

            if (!hasControlledEntity)
            {
                Vector3D pos = Vector3D.Zero;
                stream.Serialize(ref pos); // 24B
                m_positionEntityServer = null;
                Position = pos;
            }
            else
            {
                var      entityId   = stream.ReadInt64();
                bool     hasControl = stream.ReadBool();
                MyEntity entity;
                if (!MyEntities.TryGetEntityById(entityId, out entity))
                {
                    m_positionEntityServer = null;
                    return;
                }

                m_positionEntityServer = entity;
                if (!hasControl)
                {
                    return;
                }

                // TODO: Obsolete check?
                MySyncEntity syncEntity = entity.SyncObject as MySyncEntity;
                if (syncEntity == null)
                {
                    return;
                }
                controlledEntity = entity;
            }
        }
 public void RegisterForTick(MySyncEntity entity)
 {
     m_newRegisteredEntities.Add(entity);
 }
Esempio n. 6
0
        void Read(BitStream stream)
        {
            // TODO: Read additional client data, context

            MyNetworkClient sender;

            if (!Sync.Clients.TryGetClient(EndpointId.Value, out sender))
            {
                Debug.Fail("Unknown sender");
                return;
            }

            var hasControlledEntity = stream.ReadBool();

            if (hasControlledEntity == false)
            {
                Vector3D pos = Vector3D.Zero;
                stream.Serialize(ref pos); // 24B
                Position = pos;
            }
            else
            {
                int numEntity = 0;
                if (stream.BytePosition < stream.ByteLength)
                {
                    var      entityId = stream.ReadInt64();
                    MyEntity entity;
                    if (!MyEntities.TryGetEntityById(entityId, out entity))
                    {
                        return;
                    }

                    MySyncEntity syncEntity = entity.SyncObject as MySyncEntity;
                    if (syncEntity == null)
                    {
                        return;
                    }

                    Context = (MyContextKind)stream.ReadInt32(2);

                    switch (Context)
                    {
                    case MyContextKind.Inventory:
                        entityId = stream.ReadInt64();
                        break;

                    case MyContextKind.Terminal:
                        entityId = stream.ReadInt64();
                        break;

                    case MyContextKind.Production:
                        entityId = stream.ReadInt64();
                        break;

                    default:
                        entityId = stream.ReadInt64();
                        break;
                    }

                    MyEntities.TryGetEntityById(entityId, out entity);
                    ContextEntity = entity;

                    if (!syncEntity.ResponsibleForUpdate(sender))
                    {
                        // Also happens when entering cockpit due to order of operations and responsibility update change
                        //Debug.Fail("Server sending entity update for entity controlled by client, should happen only very rarely (packets out-of-order)");
                        return;
                    }
                    syncEntity.SerializePhysics(stream, sender);

                    if (numEntity == 0)
                    {
                        Position = syncEntity.Entity.WorldMatrix.Translation;
                    }
                    numEntity++;
                }
            }
        }