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); } }
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); * }*/ }
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); }
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++; } } }